我有一个按两列排序的数据框:“ID”和一个日期列。
该表中有大量缺失值,我感兴趣的是了解缺失值是如何分布的:它们是否主要集中在一个“ID”上,所有ID是否在开始时都有缺失值,例如(日期),缺失值是否无关等
在groupby ID+缺失值计数之后,我使用了missingno包,它被证明是有用的,这是我得到的结果(清理列名):
从图中可以看出,似乎有特定批次的行中缺少了大多数列。
例如,如果您查看箭头,我可能可以大致估计要搜索的索引的值(~idx=750000),但这并不实际,因为还有其他实例发生了相同的情况。
我想要的是一个函数batches_missing(cols, n_rows)
,它接受一个列列表和一个intn_rows
,并返回所有批次的元组列表[(index_start_batch1,index_end_batch1),…],其中给定的列有n行以上连续的缺失值行
通过一个模拟示例:
df = pd.DataFrame({'col1':[1, 2, np.nan, np.nan, np.nan, np.nan, 2, 2, np.nan, np.nan, np.nan],
'col2':[9, 7, np.nan, np.nan, np.nan, np.nan, 0, np.nan, np.nan, np.nan, np.nan],
'col3':[11, 12, 13, np.nan, 1, 2, 3, np.nan, 1, 2, 3]})
batches_missing(['col1','col2'] , 3)
将返回[(2,5),(8,10)]
考虑到实际数据相当大(1百万行),这能有效地做到吗?我也非常有兴趣了解分析缺失数据的其他方法,因此非常感谢阅读材料/链接
谢谢大家
在给定选定列的情况下,按行计数以查看哪些行都是NAs:
现在,您可以将此运行分组:
然后计算每个组中的nas数量,并获得开始和结束:
也许有更好的方法来获得这个职位,而不是像我那样使用pd.Series。现在,将其包装成一个函数:
相关问题 更多 >
编程相关推荐