检查 Pandas 中的单个单元格值是不是为 NaN
Posted
技术标签:
【中文标题】检查 Pandas 中的单个单元格值是不是为 NaN【英文标题】:Check if single cell value is NaN in Pandas检查 Pandas 中的单个单元格值是否为 NaN 【发布时间】:2015-03-01 12:52:32 【问题描述】:我只想检查 Pandas 系列中的单个单元格是否为空,即检查值是否为 NaN
。
所有其他答案均适用于系列和数组,但不适用于单值。
我试过pandas.notnull
、pandas.isnull
、numpy.isnan
。是否有仅针对单个值的解决方案?
【问题讨论】:
您能否为您的问题添加一个输入和输出的最小示例? numpy.isnan 适用于单个值,但我想这不是你的问题。 例如如果 numpy.isnan(vendor_details['EMAIL']): 这里的 vendor_details 是一个熊猫系列。 我投票结束:OP 中描述的所有三种方法都应该有效,并且接受的解决方案只是使用其中的两种。同样,公认的答案是完全按照 OP 所说的行不通。 【参考方案1】:试试这个:
import pandas as pd
import numpy as np
from pandas import *
>>> L = [4, nan ,6]
>>> df = Series(L)
>>> df
0 4
1 NaN
2 6
>>> if(pd.isnull(df[1])):
print "Found"
Found
>>> if(np.isnan(df[1])):
print "Found"
Found
【讨论】:
很有用,isnull和isnan方法有什么区别?有没有办法像if df[1] then
或类似的那样测试 NaN 的真实性?
isnull和isnan没有区别; isnull 是 isnan 的别名。【参考方案2】:
您可以使用“isnull”和“at”来检查数据框中的特定值。
例如:
import pandas as pd
import numpy as np
df = pd.DataFrame([[np.nan, 2], [1, 3], [4, 6]], columns=['A', 'B'])
产量:
A B
0 NaN 2
1 1.0 3
2 4.0 6
检查值:
pd.isnull(df.at[0,'A'])
-> 是的
pd.isnull(df.at[0,'B'])
-> 错误
【讨论】:
【参考方案3】:第 1 步。)
df[df.isnull().any(1)]
----> 如果有任何值,将为您提供带有行和列的数据框。
第 2 步。)
这将为您提供数据框中的确切值是 nan 的位置。 那你就可以了
if(**df.iloc[loc_row,loc_colum]==np.nan**):
print"your code here"
【讨论】:
【参考方案4】:我自己刚遇到这个问题,找到了一个解决方案,不完美,但有效。如上所述,这三个答案都没有解决 OP 的问题。这是我的问题的一个例子,我觉得是一样的。
# fill null values of one column with that of another
f = lambda row: row['A'] if (row['B'].isnull()) else row['B']
df['B'] = df.apply(f, axis=1)
>>> AttributeError: 'str' object has no attribute 'isnull'
因为值 within 数据框的一个单元格只是一个原始数据类型,所以您不能使用任何 pandas 内置方法。所以这就是我所做的。
f = lambda row: row['A'] if (str(row['B'])=='nan') else row['B']
这实际上是我唯一可以开始工作的事情!
【讨论】:
这在大多数情况下也适用于我。请注意,如果无法使用 str() 读取单元格值,则此解决方案将不起作用。即,如果使用 Python 2.7 并且单元格具有 unicode 字符串。 Python 2.7 对 str() 使用 ascii 编码,如果使用它来检查 unicode 字符串,则会抛出错误。以上是关于检查 Pandas 中的单个单元格值是不是为 NaN的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Pandas 在 Python 中基于同一行中的另一个单元格设置单元格值