将默认值添加到dataframe

时间:2016-12-13 09:37:15

标签: python pandas dataframe

我有一个数据框,其中包含一天中的小时作为索引,以及每小时的值。像这样:

    val
09   1
10   2
12   3
13   3
14   5
17   8

我想用一天中所有小时的值来填充df,所以它将从00开始并一直到23并用0填充它的值。

我想我可以循环索引并检查值是否退出或索引,如果没有添加它,但我不知道如何循环DataFrame,我想有一个简单的方法来做我想要的任务。

2 个答案:

答案 0 :(得分:4)

你可以reindex你的df,这会将行NaN放在哪些行不存在但你可以提供fill_value=0来替换它们:

In [48]:
df.reindex(np.arange(24), fill_value=0)

Out[48]:
    val
0     0
1     0
2     0
3     0
4     0
5     0
6     0
7     0
8     0
9     1
10    2
11    0
12    3
13    3
14    5
15    0
16    0
17    8
18    0
19    0
20    0
21    0
22    0
23    0

如果您的索引为string dtype,则需要先转换为int

df.index = df.index.astype(int)

然后执行上述操作并使用str.zfill向前和向左投掷所需的零数:

In [49]:
df = df.reindex(np.arange(24), fill_value=0)
df.index = df.index.astype(str).str.zfill(2)
df

Out[49]:
    val
00    0
01    0
02    0
03    0
04    0
05    0
06    0
07    0
08    0
09    1
10    2
11    0
12    3
13    3
14    5
15    0
16    0
17    8
18    0
19    0
20    0
21    0
22    0
23    0

答案 1 :(得分:1)

一行解决方案 - Series需要reindexzfill添加0,参数0fill_value=0

print (df.reindex(pd.Series(np.arange(24)).astype(str).str.zfill(2), fill_value=0))
    val
00    0
01    0
02    0
03    0
04    0
05    0
06    0
07    0
08    0
09    1
10    2
11    0
12    3
13    3
14    5
15    0
16    0
17    8
18    0
19    0
20    0
21    0
22    0
23    0