填写缺失值pandas dataframe

时间:2015-06-20 16:03:59

标签: python numpy pandas dataframe

我试图根据日期列填充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

我在这里缺少什么?

2 个答案:

答案 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')根据日期列重新取样数据并自动填写缺失值。