在Pandas数据帧中添加缺失值

时间:2017-10-27 01:51:29

标签: python

我有一个以下结构的数据框(将其显示为逗号分隔值):

day        date      hour cnt
Friday   9/15/2017    0    3
Friday   9/15/2017    1    5
Friday   9/15/2017    2    8
Friday   9/15/2017    3    6
...........................
Friday   9/15/2017    10
...........................
Saturday 9/16/2017    21   5
Saturday 9/16/2017    22   4

某些日期值包含每小时(0-23)的数据。

但是,某些日期值可能会丢失小时数。在该示例中,对于9/15/2017数据,没有从9到13的小时值的记录。对于所有这些丢失的记录,我需要添加具有cnt值(最后一列)的新记录。零。

我如何在Python中实现这一目标?

2 个答案:

答案 0 :(得分:0)

如果您使用pandas.DataFrame,则可以使用fillna()方法:

 DataFrame['cnt'].fillna(value=0, axis=1)

实施例

考虑data

        one     two     three
a       NaN     1.2  -0.355322
c       NaN     3.3   0.983801
e       0.01     4   -0.712964

您可以使用NaN填充fillna()

data.fillna(0)

        one     two     three
a        0      1.2  -0.355322
c        0      3.3   0.983801
e       0.01     4   -0.712964

答案 1 :(得分:0)

您可以生成DatetimeIndex并使用resample方法:

#suppose your dataframe is named df:
idx = pd.DatetimeIndex(pd.to_datetime(df['date']).add(pd.to_timedelta(df['hour'], unit='h')))
df.index = idx
df_filled = df[['cnt']].resample('1H').sum().fillna(0).astype(int)
df_filled['day'] = df_filled.index.strftime('%A')
df_filled['date'] = df_filled.index.strftime('%-m/%-d/%Y')
df_filled['hour'] = df_filled.index.strftime('%-H')

或者您可以使用枢轴和非透视技巧:

df_filled = df.pivot(values='cnt',index='date',columns='hour').fillna(0).unstack()
df_filled = df_filled.reset_index().sort_values(by=['date','hour'])