我试图根据日期列填充pandas数据框中的缺失数据值。
df.head()
col1 col2 col3
date
2014-06-20 3 752 4028
2014-06-21 4 752 4028
2014-06-22 32 752 4028
2014-06-25 44 882 4548
2014-06-26 32 882 4548
我尝试了以下
idx = pd.date_range(df.index[0], df.index[-1])
df = df.reindex(idx).reset_index()
但是,我得到了一个nans的数据框。
index col1 col2 col3
0 2014-06-20 NaN NaN NaN
1 2014-06-21 NaN NaN NaN
2 2014-06-22 NaN NaN NaN
3 2014-06-23 NaN NaN NaN
4 2014-06-24 NaN NaN NaN
我在这里缺少什么?
答案 0 :(得分:3)
如果索引是pd.Index
,则会描述您所描述的行为
字符串,而不是包含时间戳的pd.DatetimeIndex
。
例如,
import pandas as pd
df = pd.DataFrame(
{'col1': [3, 4, 32, 44, 32],
'col2': [752, 752, 752, 882, 882],
'col3': [4028, 4028, 4028, 4548, 4548]},
index = ['2014-06-20', '2014-06-21', '2014-06-22', '2014-06-25', '2014-06-26'])
idx = pd.date_range(df.index[0], df.index[-1])
print(df.reindex(idx).reset_index())
# index col1 col2 col3
# 0 2014-06-20 NaN NaN NaN
# 1 2014-06-21 NaN NaN NaN
# 2 2014-06-22 NaN NaN NaN
# 3 2014-06-23 NaN NaN NaN
# 4 2014-06-24 NaN NaN NaN
# 5 2014-06-25 NaN NaN NaN
# 6 2014-06-26 NaN NaN NaN
相反,如果您将索引设为DatetimeIndex:
df.index = pd.DatetimeIndex(df.index)
然后
print(df.reindex(idx).reset_index())
index col1 col2 col3
0 2014-06-20 3 752 4028
1 2014-06-21 4 752 4028
2 2014-06-22 32 752 4028
3 2014-06-23 NaN NaN NaN
4 2014-06-24 NaN NaN NaN
5 2014-06-25 44 882 4548
6 2014-06-26 32 882 4548
答案 1 :(得分:0)
Pandas有一个内置的方法来实现这一目标。看看http://pandas.pydata.org/pandas-docs/stable/timeseries.html。
您可以使用df.asfreq('1d')
根据日期列重新取样数据并自动填写缺失值。