如何查看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()
我有大量数据(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()