#python #pandas #date
#python #pandas #Дата
Вопрос:
Pandas read_fwf затрудняет интерпретацию строки, подобной дате
Я читаю несколько сотен файлов фиксированной ширины в базу данных postgresql, анализируя ее с помощью кода pandas read_fwf.
Мой камень преткновения — попытка извлечь конечную дату из периода из последних десяти столбцов одной из строк.
Пример файла можно найти по этой ссылке на веб-сайте NOAA:
Критический фрагмент кода из моего скрипта Python / pandas:
import os
import time
import requests
import pandas as pd
import time
import datetime
from dateutil.parser import *
## Load adapters
import psycopg2
import psycopg2.extensions
df = pd.read_fwf(ddFname, header=None, )
if str(df[0:1]).find('COOLING') >= 0:
amtType = 'CDD'
elif str(df[0:1]).find('HEATING') >= 0:
amtType = 'HDD'
prDate = str(df[3:4])[-10:-1]
print(prDate)
Когда я вызываю последнюю строку, я получаю следующее:
SEP 24,...
когда мне нужно следующее:
SEP 24, 2016
Большое спасибо за любую помощь.
Комментарии:
1. Учитывая, что вы читаете его через fwf и на основе входного файла, похоже
2016
, что он был помещен в следующий столбец. Возможно,df[3:5]
вместоdf[3:4]
Ответ №1:
Используя файл примера, который вы опубликовали. Для меня работает следующее:
df = pd.read_fwf(ddFname, header=None, )
str(df.at[4, 0])[-12:]
# Out[99]: 'SEP 24, 2016'
Когда вы делаете что-то вроде:
str(df[3:5])
Вы вызываете __repr__
метод фрейма данных pandas. Метод repr часто усекает большие ячейки для удобства чтения (как это происходит в этом случае). В этом случае это выглядит так:
repr(df[3:5])
Out[106]: ' 0 1n3 NaN NaNn4 LAST DATE OF DATA COLLECTION PERIOD IS SEP 24,... NaN'
и str(_)[-10:-1]
дает:
Out[107]: '4,... Na'
Индексы между вашим файлом и моим не совсем совпадают, но, надеюсь, вы лучше понимаете, что здесь происходит. Использование at
приведет к доступу к фактическому значению в определенной строке и столбце (значение не будет усечено).