【问题标题】:Selecting pandas cells with None value选择具有 None 值的 pandas 单元格
【发布时间】:2015-01-09 16:27:25
【问题描述】:

我有一列 pandas 数据框,它是从带有空白单元格的数据库查询中获得的。空白单元格变为“无”,我想检查每一行是否为无:

In [325]: yes_records_sample['name']
Out[325]: 
41055    John J Murphy Professional Building
25260                                   None
41757             Armand Bayou Nature Center
31397                                   None
33104               Hubert Humphrey Building
16891                         Williams Hall
29618                                   None
3770                          Covenant House
39618                                   None
1342       Bhathal Student Services Building
20506                                   None

我对文档的理解是,我可以使用isnull() 命令http://pandas.pydata.org/pandas-docs/dev/missing_data.html#values-considered-missing 检查每一行是否为空

但是,该功能对我不起作用:

In [332]: isnull(yes_records_sample['name'])

我收到以下错误:

NameError Traceback (most recent call last)
<ipython-input-332-55873906e7e6> in <module>()
----> 1 isnull(yes_records_sample['name'])
NameError: name 'isnull' is not defined

我还看到有人刚刚替换了“None”字符串,但这种方法的这些变体都不适合我: Rename "None" value in Pandas

yes_records_sample['name'].replace('None', "--no value--")
yes_records_sample['name'].replace(None, "--no value--")

我最终能够使用 fillna 函数并用空字符串 yes_records_sample.fillna('') 填充每一行作为解决方法,然后我可以检查 yes_records_sample['name']=='' 但我对“无”的工作原理和这是什么意思。有没有办法轻松检查数据框中的单元格是否为“无”?

【问题讨论】:

    标签: python pandas null na


    【解决方案1】:

    我找不到任何可以做到这一点的内置程序,所以我手动完成。在系列的情况下,代码是这样的:

    import numpy as np
    series = yes_records_sample['name']
    n = np.empty_like(series)
    n[...] = None
    nones = series.values == n
    

    对于DataFrames,代码非常相似:

    import numpy as np
    df = yes_records_sample
    n = np.empty_like(df)
    n[...] = None
    nones = df == n
    

    我对 .isnull() 的问题是它不区分 NaN 和 None。这可能是您的应用程序中的问题,也可能不是。

    【讨论】:

      【解决方案2】:

      这样称呼它:

      yes_records_sample['name'].isnull()
      

      【讨论】:

      • 我一直在试图弄清楚如果 'impact' == 'HIGH' 或 'clin_acc' 不为 Null 时,如何向 pandas 数据框中添加一列。这有很大帮助:nbs_annot['pathogenic'] = (nbs_annot['impact'] == 'HIGH') | ~nbs_annot['clin_acc'].isnull()
      猜你喜欢
      • 1970-01-01
      • 2021-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-07
      • 1970-01-01
      相关资源
      最近更新 更多