选择具有None值的pandas单元格

20
我有一个 pandas 数据框的列,这个列是从数据库查询中获取的,其中包含空白单元格。空白单元格会变成 "None",我想检查每一行是否为 None:
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"字符串,但这些方法都对我不起作用: 在Pandas中重命名"None"值

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']==''。但是我对'None'的工作原理和含义感到深深困惑。是否有一种简单的方法只检查数据框中的单元格是否为'None'?
3个回答

40

像这样调用:

yes_records_sample['name'].isnull()

我一直在尝试弄清楚如何向Pandas数据框中添加一列,如果'impact' == 'HIGH'或'clin_acc'不为空,则该列为true。这个代码非常有帮助:nbs_annot['pathogenic'] = (nbs_annot['impact'] == 'HIGH') | ~nbs_annot['clin_acc'].isnull() - SummerEla

1

如果你要检查None以及其他一堆值,并且希望重复使用相同的代码而不是为.isnull()单独编写特殊情况,你可以在比较中使用.values

df[df['A'].values == None]
df[df['A'].values == 'foo']  # works just as well for anything else you want to match on

1

我找不到任何内置的功能来完全实现这一点,所以我手动完成。对于Series而言,代码如下:

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。这在你的应用程序中可能是一个问题,也可能不是。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接