如何查看python中缺失数据的类型(随机缺失与否)?

How to check the type of missing data in python(randomly missing or not)?

我有大量数据(93 个文件,每个约 150 MB)。数据是一个时间序列,即每天记录和存储一组给定坐标(330万个经纬度值)的信息,持续93天,整个数据分别被分解成93个文件。两个此类文件的示例:

第 1 天:

lon   lat   A    B   day1
68.4  8.4  NaN  20   20
68.4  8.5  16   20   18
68.6  8.4  NaN  NaN  NaN
 .
 .

第 2 天:

lon   lat   C    D   day2
68.4  8.4  NaN  NaN  NaN
68.4  8.5  24   25   24.5
68.6  8.4  NaN  NaN  NaN
 .
 .

我有兴趣了解 'day1'、'day2'、'day3' 等列中缺失数据的性质。例如,如果相关列中缺失值在所有坐标集中均匀分布,那么数据可能随机丢失,但如果缺失值更多地集中在特定坐标集中,那么我的数据将变得有偏差。考虑一下我的数据被分成多个大文件的方式,并且不是以非常标准的形式进行操作,这使得使用某些工具变得更加困难。

我正在 python 中寻找诊断工具或可视化工具,它可以 check/show 如何在坐标集上分布缺失数据,因此我可以 impute/ignore 适当地进行处理。

谢谢。

P.S:这是我第一次处理丢失的数据,所以很高兴看看是否存在从事类似工作的人遵循的工作流程。

假设您读取文件并将其命名为df。您可以使用以下方法计算 NaN 的数量:

df.isnull().sum()

它将 return 每列的 NaN 数量。 您还可以使用:

df.isnull().sum(axis=1).value_counts()

另一方面,这将对每行的 NaN 数求和,然后计算没有 NaN、1 个 NaN、2 个 NaN 等的行数。

关于处理这种大小的文件,为了加快数据加载和处理速度,我建议使用 Dask 并将文件格式最好更改为 parquet 以便您可以并行读取和写入它。

您可以像这样在 Dask 中轻松地重新创建上面的函数:

from dask import dataframe as dd

dd.read_parquet(file_path).isnull().sum().compute()

回答评论问题:

使用 .loc 对数据框进行切片,在下面的代码中,我选择了所有行 : 和两列 ['col1', 'col2']

df.loc[:, ['col1', 'col2']].isnull().sum(axis=1).value_counts()