我有一个具有以下格式的 CSV 文件 (aal_21_02_2018):
,Open,High,Low,Close,Volume
2018-02-21 08:01:00,1744.2,1746.0,1738.6,1738.6,34727
2018-02-21 08:02:00,1738.8,1743.0,1738.8,1740.0,6483
2018-02-21 08:03:00,1739.6,1739.6,1737.8,1738.2,6622
我想把这个文件变成一个DataFrame。当我运行以下方法时:
df = read_csv('aal_21_02_2018', index_col='datetime')
显示以下错误:
ValueError: Index datetime invalid
如何正确地将这个 CSV 文件解析为 DataFrame?
最佳答案
您有一个未命名的列,因此请传递序数位置
df = read_csv('aal_21_02_2018', index_col=0)
示例:
In[4]:
df = pd.read_csv(io.StringIO(t), index_col=0)
df
Out[4]:
Open High Low Close Volume
2018-02-21 08:01:00 1744.2 1746.0 1738.6 1738.6 34727
2018-02-21 08:02:00 1738.8 1743.0 1738.8 1740.0 6483
2018-02-21 08:03:00 1739.6 1739.6 1737.8 1738.2 6622
如果您需要 datetimeIndex,则可以传递 parse_dates=[0]
:
In[7]:
df = pd.read_csv(io.StringIO(t), index_col=0, parse_dates=[0])
df
Out[7]:
Open High Low Close Volume
2018-02-21 08:01:00 1744.2 1746.0 1738.6 1738.6 34727
2018-02-21 08:02:00 1738.8 1743.0 1738.8 1740.0 6483
2018-02-21 08:03:00 1739.6 1739.6 1737.8 1738.2 6622
我们可以看到索引现在是一个 datetimeIndex:
In[8]:
df.index
Out[8]:
DatetimeIndex(['2018-02-21 08:01:00', '2018-02-21 08:02:00',
'2018-02-21 08:03:00'],
dtype='datetime64[ns]', freq=None)
关于这是如何发生的,默认的 to_csv
行为是将索引输出为未命名列,如果您传递 index_label='datetime'
那么这将写出一个命名索引:
In[10]:
df.to_csv(index_label='datetime')
Out[10]: 'datetime,Open,High,Low,Close,Volume
2018-02-21 08:01:00,1744.2,1746.0,1738.6,1738.6,34727
2018-02-21 08:02:00,1738.8,1743.0,1738.8,1740.0,6483
2018-02-21 08:03:00,1739.6,1739.6,1737.8,1738.2,6622'
那么你的原始代码就会起作用:
In[12]:
pd.read_csv(io.StringIO(df.to_csv(index_label='datetime')), index_col='datetime')
Out[12]:
Open High Low Close Volume
datetime
2018-02-21 08:01:00 1744.2 1746.0 1738.6 1738.6 34727
2018-02-21 08:02:00 1738.8 1743.0 1738.8 1740.0 6483
2018-02-21 08:03:00 1739.6 1739.6 1737.8 1738.2 6622
关于python - Pandas read_csv 日期时间错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48904194/