【问题标题】:How to check the type of missing data in python(randomly missing or not)?如何检查python中缺失数据的类型(随机缺失与否)?
【发布时间】:2018-06-21 12:01:52
【问题描述】:

我有大量数据(93 个文件,每个约 150mb)。数据是一个时间序列,即每天记录和存储一组给定坐标(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 中的可视化工具,可以检查/显示缺失数据在坐标集上的分布情况,以便我可以适当地估算/忽略它。

谢谢。

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

【问题讨论】:

    标签: python time-series large-data missing-data imputation


    【解决方案1】:

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

    df.isnull().sum()
    

    它将为您返回每列的 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()
    

    【讨论】:

    • 如果我想数数。行中的 NaN 但仅在特定列中,因为我只想计算“day”列中的 NaN?
    猜你喜欢
    • 2020-03-12
    • 2018-08-08
    • 2018-01-16
    • 2021-08-17
    • 1970-01-01
    • 1970-01-01
    • 2016-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多