处理熊猫中的重复日期

时间:2018-07-31 19:53:46

标签: python pandas date duplicates time-series

问题是我的数据集很大,缺少日期条目,而且重复。我不能删除它们中的任何一个,因此,我需要添加缺少的日期并使对应的列为NaN。 这是它的示例代码。

df = pd.DataFrame({
'timestamps': pd.to_datetime(
    ['2016-11-15 1:00','2016-11-16 2:00','2016-11-16 3:00','2016-11-18 4:00']),
'values':['a','b','c','d']})
 df.index = pd.DatetimeIndex(df['timestamps']).floor('D')

 all_days = pd.date_range(df.index.min(), df.index.max(), freq='D')

在搜索时,我发现我们不应该使用df.reindex(),因为它不能处理重复项。所以另一个解决方案是使用      df.loc[all_days],但是,每次我将其用作     df.loc[all_days] = [0,0]只是说我需要添加到数据框中的缺失日期不在索引中。

它应该从这里开始:

           timestamps             values
2016-11-15  "2016-11-15 01:00:00"  a
2016-11-16  "2016-11-16 02:00:00"  b
2016-11-16  "2016-11-16 03:00:00"  c
2016-11-18  "2016-11-18 04:00:00"  d`

对此:

timestamps             values
2016-11-15  "2016-11-15 01:00:00"  a
2016-11-16  "2016-11-16 02:00:00"  b
2016-11-16  "2016-11-16 03:00:00"  c 
2016-11-17  NaN                    NaN
2016-11-18  "2016-11-18 04:00:00"  d

1 个答案:

答案 0 :(得分:1)

您可以将all_days设置为数据框,然后使用df进行外部联接,然后删除新的不必要的列:

new_df = df.join(all_days.to_frame(), how='outer').drop(0,1)

>>> new_df
                    timestamps values
2016-11-15 2016-11-15 01:00:00      a
2016-11-16 2016-11-16 02:00:00      b
2016-11-16 2016-11-16 03:00:00      c
2016-11-17                 NaT    NaN
2016-11-18 2016-11-18 04:00:00      d