Панды не будут распознавать datetimeindex из CSV-файла

1

Я пытаюсь прочитать этот файл из двух столбцов в dataframe. Он не читается как дата и время.

INPUT :
DATE    DTB3
8/4/2014    0.0004
8/5/2014    0.0003
8/6/2014    0.0003
........

Используя этот код:

T1 = pd.read_csv(FRED_file,sep=',',header=None,names=['DATE','DTB3'],dtype= {'DATE':'str','DTB3':'str'},parse_dates=['DATE'],index_col='DATE')
T1.drop(T1.index[0],inplace=True)
T1.index = pd.to_datetime(T1.index, format = '%m/%d%Y')
T1.index = T1.index.strftime('%Y-%m-%d')
T1.index

Выход:

Index(['2014-08-04', '2014-08-05', '2014-08-06', '2014-08-07', '2014-08-08',
       '2014-08-11', '2014-08-12', '2014-08-13', '2014-08-14', '2014-08-15',
           ...
       '2018-09-07', '2018-09-10', '2018-09-11', '2018-09-12', '2018-09-13',
       '2018-09-14', '2018-09-17', '2018-09-18', '2018-09-19', '2018-09-20'],
       dtype='object', length=1079)
Теги:
pandas
csv
datetime

2 ответа

1

Похоже, вы конвертируете индекс в datetime в строку to_datetime а затем преобразуете его обратно в строку с использованием strftime (время форматирования строки). Я думаю, что если вы удалите эту строку strftime вас должен быть индекс datetime

  • 0
    Это правильный ответ. Удалите T1.index = T1.index.strftime('%Y-%m-%d') .
0

Причина, почему он не распознает функцию datetimes function read_csv - это header=None параметра header=None - он конвертирует первую строку csv в первую строку данных (и индекса) и преобразовывает их в datetime без пауз:

temp=u"""DATE,DTB3
8/4/2014,0.0004
8/5/2014,0.0003
8/6/2014,0.0003"""
#after testing replace 'pd.compat.StringIO(temp)' to FRED_file
T1 = pd.read_csv(pd.compat.StringIO(temp), 
                 header=None,
                 names=['DATE','DTB3'],
                 dtype= {'DTB3':'str'},
                 parse_dates=['DATE'],
                 index_col='DATE'
                 )

print (T1)
            DTB3
DATE            
DATE        DTB3
8/4/2014  0.0004
8/5/2014  0.0003
8/6/2014  0.0003

print (T1.index)

Index(['DATE', '8/4/2014', '8/5/2014', '8/6/2014'], dtype='object', name='DATE')

Вы можете опустить header параметра, names - потому что файл содержит csv header sep - потому что sep=',' является параметром по умолчанию, 'DATE':'str' из dtype - если / находится в значениях, он преобразуется в string s:

import pandas as pd

temp=u"""DATE,DTB3
8/4/2014,0.0004
8/5/2014,0.0003
8/6/2014,0.0003"""
#after testing replace 'pd.compat.StringIO(temp)' to FRED_file
T1 = pd.read_csv(pd.compat.StringIO(temp), 
                 dtype= {'DTB3':'str'},
                 parse_dates=['DATE'],
                 index_col='DATE'
                 )

print (T1)
              DTB3
DATE              
2014-08-04  0.0004
2014-08-05  0.0003
2014-08-06  0.0003

print (T1.index)
DatetimeIndex(['2014-08-04', '2014-08-05', '2014-08-06'], 
               dtype='datetime64[ns]', name='DATE', freq=None)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню