reindex为pandas数据帧添加缺少的日期

时间:2015-12-17 04:18:53

标签: python date pandas

我尝试解析一个如下所示的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)以正确行事,但仍然无法弄明白。请帮忙。

1 个答案:

答案 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格式的日期存在快速路径。