Python 熊猫重复日期的处理
问题是,我有一个大型数据集,其中缺少日期条目,而且重复。我不能删除任何一个,因此,我需要添加缺少的日期,并将相应的列设置为NaN。 下面是它的示例代码Python 熊猫重复日期的处理,python,pandas,date,duplicates,time-series,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.
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[所有天]
但是,每次我把它用作
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
您可以将
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
很好。使用merge非常好。谢谢@ScottBoston!但是我意识到使用
join
比使用merge
要简洁得多(尽管两者都可以使用)