【问题标题】:Python Dataframe get null value countsPython Dataframe 获取空值计数
【发布时间】:2017-10-04 13:54:08
【问题描述】:

我正在尝试在 DataFrame 中查找空值。尽管我查看了 Stackoverflow 中描述确定空值的过程的以下帖子,但我很难为我的数据集做同样的事情。

How to count the Nan values in the column in Panda Data frame

工作代码:

import pandas as pd
a = ['america','britain','brazil','','china','jamaica'] #I deliberately introduce a NULL value
a = pd.DataFrame(a)
a.isnull()

#Output: 
False
1  False
2  False
3  False
4  False
5  False

a.isnull().sum()
#Output
#0    0
#dtype: int64

我做错了什么?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    列表中的'' 不是空值,而是空字符串。要获得 null,请改用 None。这在pandas.isnull() documentation 中有描述,缺失值是“数值数组中的 NaN,[或] 对象数组中的 None/NaN”。

    import pandas as pd
    a = ['america','britain','brazil',None,'china','jamaica']
    a = pd.DataFrame(a)
    a.isnull()
    
           0
    0  False
    1  False
    2  False
    3   True
    4  False
    5  False
    

    您可以通过打印两个数据框来查看差异。在第一种情况下,数据框如下所示:

    pd.DataFrame(['america','britain','brazil',None,'china','jamaica'])
    
             0
    0  america
    1  britain
    2   brazil
    3         
    4    china
    5  jamaica
    

    请注意,索引 3 处的值是一个空字符串。

    在第二种情况下,你得到:

    pd.DataFrame(['america','britain','brazil',None,'china','jamaica'])
    
             0
    0  america
    1  britain
    2   brazil
    3     None
    4    china
    5  jamaica
    

    【讨论】:

    • “与标准 Python 不同,pandas 中的空字符串不被视为空值。”我不认为这是正确的。空字符串还是字符串!
    • @AndyHayden 那句话对我来说措辞很糟糕。我试图指出空值与测试为 False 的事物之间的区别。
    【解决方案2】:

    其他帖子提到 '' 不是空值,因此不使用 isnull 方法计算...

    ...但是,'' 在被解释为bool 时确实会评估为False

    a.astype(bool)
    
           0
    0   True
    1   True
    2   True
    3  False
    4   True
    5   True
    

    如果您的数据框中有 '' 并希望以这种方式处理它,这可能会很有用。

    【讨论】:

      【解决方案3】:

      如果您希望''NoneNaN 都算作null,您可以对数据框中的每个值使用applymap 方法强制转换为boolean,然后使用@987654327 @随后:

      import pandas as pd
      import numpy as np
      
      
      a = ['america','britain','brazil',None,'', np.nan, 'china','jamaica'] #I deliberately introduce a NULL value
      a = pd.DataFrame(a)
      a.applymap(lambda x: not x or pd.isnull(x)).sum()
      
      # 0    3
      # dtype: int64
      

      我希望这会有所帮助。

      【讨论】:

      • 谢谢。解决了我的问题:)
      猜你喜欢
      • 2019-03-31
      • 1970-01-01
      • 2019-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-30
      • 1970-01-01
      • 2017-06-05
      相关资源
      最近更新 更多