问题是我的数据集很大,缺少日期条目,而且重复。我不能删除它们中的任何一个,因此,我需要添加缺少的日期并使对应的列为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
答案 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