【问题标题】:reindex to add missing dates to pandas dataframe重新索引以将缺失的日期添加到 pandas 数据框
【发布时间】:2015-12-17 15:01:37
【问题描述】:

我尝试解析如下所示的 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=Trueread_csv)来做对,但仍然无法弄清楚。请帮忙。

【问题讨论】:

  • 您可以尝试将dayfirst=True 添加到read_csv()
  • 是的,我试过了,但结果是一样的

标签: python date pandas


【解决方案1】:

使用parse_dates=[0]parse_dates 设置为第一列:

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 : 布尔值、整数或名称列表、列表列表或字典

如果为真 -> 尝试解析索引。

如果 [1, 2, 3] -> 尝试将第 1、2、3 列分别解析为单独的日期列。

如果 [[1, 3]] -> 合并第 1 列和第 3 列并解析为单个日期列。

{'foo' : [1, 3]} -> 将第 1、3 列解析为日期并调用结果 'foo'

存在适用于 iso8601 格式日期的快速路径。

【讨论】:

  • @MikeMüller,尝试使用它,但我每个日期有多个条目,这是工厂轮班的缺勤记录。因此,我们可以有 2 条关于 2015 年 8 月 5 日请病假的人的记录,但是直到 2015 年 8 月 9 日我们可以有 3 天没有更多的病假。我的代码在该行中断: ts = ts.reindex(idx , fill_value='NaN') 你能在这个问题中回答这个问题还是我应该创建一个新问题?谢谢!
  • 继续创建一个新问题。请举例说明您尝试实现的目标。
  • @MikeMüller,此处发布的问题:stackoverflow.com/questions/45506038/… 感谢您提供的任何见解!
猜你喜欢
  • 2013-10-19
  • 2017-12-22
  • 1970-01-01
  • 2016-08-11
  • 2021-08-27
  • 2021-08-11
  • 2021-04-06
  • 1970-01-01
  • 2019-06-24
相关资源
最近更新 更多