我尝试解析一个如下所示的CSV文件:
dd.mm.yyyy value
01.01.2000 1
02.01.2000 2
01.02.2000 3
我需要添加缺少日期并使用 NaN 填充相应值。我在this question中使用了Series.reindex
:
import pandas as pd
ts=pd.read_csv(file, sep=';', parse_dates='True', index_col=0)
idx = pd.date_range('01.01.2000', '02.01.2000')
ts.index = pd.DatetimeIndex(ts.index)
ts = ts.reindex(idx, fill_value='NaN')
但结果是,由于日期格式(即mm / dd而不是dd / mm),某些日期的值会被交换:
01.01.2000 1
02.01.2000 3
03.01.2000 NaN
...
...
31.01.2000 NaN
01.02.2000 2
我尝试了几种方法(例如将dayfirst=True
添加到read_csv
)以正确行事,但仍然无法弄明白。请帮忙。
答案 0 :(得分:4)
将parse_dates
设置为parse_dates=[0]
的第一列:
ts = pd.read_csv(file, sep=';', parse_dates=[0], index_col=0, dayfirst=True)
idx = pd.date_range('01.01.2000', '02.01.2000')
ts.index = pd.DatetimeIndex(ts.index)
ts = ts.reindex(idx, fill_value='NaN')
print(ts)
打印:
value
2000-01-01 1
2000-01-02 2
2000-01-03 NaN
...
2000-01-31 NaN
2000-02-01 3
parse_dates=[0]
告诉pandas将第一列显式解析为日期。来自文档:
parse_dates:boolean,int或名称列表,列表列表或dict
如果为真 - >尝试解析索引。
如果[1,2,3] - >尝试将第1,2,3列分别解析为单独的日期列。
如果[[1,3]] - >将第1列和第3列组合在一起并解析为单个日期列。
{'foo':[1,3]} - >将第1,3列解析为日期并调用结果'foo'
iso8601格式的日期存在快速路径。