重新索引以将缺失日期添加到Pandas数据框中。

4

我尝试解析一个类似于以下格式的CSV文件:

dd.mm.yyyy   value

01.01.2000   1
02.01.2000   2
01.02.2000   3

我需要添加缺失的日期并用NaN填充相应的值。我像在这个问题中一样使用了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

我尝试了几种方法(例如在read_csv中添加dayfirst=True)来正确处理它,但仍然无法弄清楚。请帮忙。


你可以尝试在 read_csv() 中添加 dayfirst=True - Martin Valgur
是的,我已经尝试过了,但结果还是一样。 - John Smith
1个回答

5
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:布尔值、整数或名称的列表、列表的列表或字典
如果为True->尝试解析索引。
如果[1,2,3]->尝试将第1、2、3列分别解析为单独的日期列。
如果[[1,3]]->将第1和3列组合起来,解析为单个日期列。
{'foo':[1,3]}->将第1、3列解析为日期,并将结果称为'foo'。
对于ISO8601格式的日期,存在快速路径。

@MikeMüller,我正在尝试使用这个代码,但是每个日期有多个条目,这是工厂班次的缺勤记录。因此,我们可能会有两条记录,说明在2015年8月5日有人请病假,但是直到2015年8月9日我们才有3天病假。我的代码在以下行中出现问题:ts = ts.reindex(idx, fill_value='NaN') 你能否在这个问题中回答这个问题,还是我应该创建一个新的问题?谢谢! - Programming_Learner_DK
请继续创建一个新问题。请提供您尝试实现的示例。 - Mike Müller
@MikeMüller,问题已在此处发布:https://dev59.com/MaTia4cB1Zd3GeqP7w-T 感谢您提供的任何见解! - Programming_Learner_DK

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接