pandas - 如果数据框已经删除了缺失的行,如何检测缺失值?
问题描述
我有一个包含连续 30 天的时间序列数据的数据框,每天应该包含从 0 到 23 的 24 小时数据,因此假设数据框中有 24*30 = 720 行。但是,有些行包含已从数据框中删除的“Fooo”列的缺失记录。
Index | DATE(YYYY/MM/DD) | Hour | Fooo
0 | 2015/01/01 | 0 | x
1 | 2015/01/01 | 1 | xy
2 | ... | ... | z
23 | 2015/01/01 | 23 | z
24 | 2015/01/02 | 0 | z
25 | 2015/01/02 | 2 | bz
... | ... | ... | z
46 | 2015/01/02 | 23 | zz
...
...
680 | 2015/01/30 | 1 | z
681 | 2015/01/30 | 3 | bz
... | ... | ... | z
701 | 2015/01/30 | 23 | zz
我想重写数据框,使其包含完整的 720 行,“Fooo”列中的缺失值被“NA”填充。
Index | DATE(YYYY/MM/DD) | Hour | Fooo
0 | 2015/01/01 | 0 | x
1 | 2015/01/01 | 1 | xy
2 | ... | ... | z
23 | 2015/01/01 | 23 | z
24 | 2015/01/02 | 0 | z
25 | 2015/01/02 | 1 | NA
26 | 2015/01/02 | 2 | bz
... | ... | ... | z
47 | 2015/01/02 | 23 | zz
...
...
690 | 2015/01/30 | 0 | NA
691 | 2015/01/30 | 1 | z
692 | 2015/01/30 | 2 | NA
693 | 2015/01/30 | 3 | bz
... | ... | ... | z
719 | 2015/01/30 | 23 | zz
我怎么能在熊猫中做到这一点?我试图用一列“Hour”创建另一个数据框,如下所示:
Index | Hour |
0 | 0 |
1 | 1 |
2 | ... |
23 | 23 |
24 | 0 |
25 | 1 |
26 | 2 |
... | ...
47 | 23 |
...
...
690 | 0 |
691 | 1 |
692 | 2
693 | 3 |
... | |
719 | 23 |
然后将它与原始的外部连接,但它不起作用。
解决方案
通过左连接product
创建助手 DataFrame :DataFrame.merge
from itertools import product
df['DATE(YYYY/MM/DD)'] = pd.to_datetime(df['DATE(YYYY/MM/DD)'])
df1 = pd.DataFrame(list(product(df['DATE(YYYY/MM/DD)'].unique(), range(27))),
columns=['DATE(YYYY/MM/DD)','Hour'])
df = df1.merge(df, how='left')
print (df.head(10))
DATE(YYYY/MM/DD) Hour Fooo
0 2015-01-01 0 x
1 2015-01-01 1 xy
2 2015-01-01 2 NaN
3 2015-01-01 3 NaN
4 2015-01-01 4 NaN
5 2015-01-01 5 NaN
6 2015-01-01 6 NaN
7 2015-01-01 7 NaN
8 2015-01-01 8 NaN
9 2015-01-01 9 NaN
或创建MultiIndex
并MultiIndex.from_product
用于DataFrame.reindex
追加缺失的行:
df['DATE(YYYY/MM/DD)'] = pd.to_datetime(df['DATE(YYYY/MM/DD)'])
mux = pd.MultiIndex.from_product([df['DATE(YYYY/MM/DD)'].unique(), range(27)],
names=['DATE(YYYY/MM/DD)','Hour'])
df = df.set_index(['DATE(YYYY/MM/DD)','Hour']).reindex(mux).reset_index()
print (df.head(10))
DATE(YYYY/MM/DD) Hour Fooo
0 2015-01-01 0 x
1 2015-01-01 1 xy
2 2015-01-01 2 NaN
3 2015-01-01 3 NaN
4 2015-01-01 4 NaN
5 2015-01-01 5 NaN
6 2015-01-01 6 NaN
7 2015-01-01 7 NaN
8 2015-01-01 8 NaN
9 2015-01-01 9 NaN
推荐阅读
- android - Firebase - 如何在 android 应用中获取归因
- symfony - Doctrine - 与关联实体的验证
- reactjs - 有没有比 redux persist 更好的方法来为生产环境持久化 redux 状态数据
- python - 背包问题
- android - chekbox 总是检查 recyclerview 中的最后一项
- javascript - jsf和javascript确认对话框
- c# - 我应该在哪里再次将标志设置为 false?
- javascript - 满足条件时使用 setInterval 和 clearInterval 运行函数?
- c++ - 在没有 std::nothrow 的构造函数中克服 std::bad_alloc
- r - 如何将 predict() 用于 survreg 模型?