带有应用功能的熊猫空值检查

Posted

技术标签:

【中文标题】带有应用功能的熊猫空值检查【英文标题】:Pandas null check with apply function 【发布时间】:2019-01-24 16:08:35 【问题描述】:

我正在使用这样的熊猫“应用”功能:

df['Geog'] = df.apply (lambda row: flagCntry(row,'country'),axis=1)

def flagCntry(row,colName):
 if (row[colName] =='US' or row[colName] =='Canada'):
 return 'North America'
elif (row[colName] ==null):# **DOES NOT work!!**
 return 'Other'

我如何在函数中执行空检查,因为语法不起作用

【问题讨论】:

我的意思是一个空白字符串。我希望保留我的“应用”语法,因为它是现有代码,我只需要添加一个空检查。我不想使用其他一些语法完全重写它 【参考方案1】:

呃...如果我理解正确的话,null 是 C/Java 语法。您可能正在寻找None

pandas 中更一般地说,this answer 应该适合你。

【讨论】:

【参考方案2】:

把你的(row[colName] ==null)改成

np.isnan(row[colName])

【讨论】:

【参考方案3】:

您可能需要考虑使用 pandas 的内置函数来执行检查。

df['Geog'] = np.nan
df.loc[df.country.isin(['US','Canada']),'Geog'] = 'North America'
df.loc[df.country.isnull(),'Geog'] = 'Other'

否则你也可以映射一个字典:

my_dict = np.nan:'Other','US':'North America','Canada':'North America'
df['Geog'] = df.country.map(my_dict)

编辑:

如果你想使用apply语法,你仍然可以使用字典:

df['Geog'] = df.country.apply(lambda x : my_dict[x])

如果您想使用自定义函数,检查元素是否为 null 的一种方法是检查它是否与自身不同:

def flagCntry(row,colName):
    if row[colName] =='US' or row[colName] =='Canada':
        return 'North America'
    elif (row[colName] != row[colName]):
        return 'Other'

df['Geog'] = df.apply(lambda row: flagCntry(row,'country'),axis=1)

如果您想匹配 None 值而不是 np.nan,您可以使用 row[colName] == None 而不是 row[colName] != row[colName]

【讨论】:

有没有办法使用“应用”语法来做到这一点? 当然有,我用apply添加了两种方式。希望它能回答你的问题!

以上是关于带有应用功能的熊猫空值检查的主要内容,如果未能解决你的问题,请参考以下文章

熊猫将两列与空值结合起来

通过包含空值的列表过滤熊猫数据框

熊猫将非空值从行中获取到一个单元格中[重复]

熊猫通过该类别的平均值填充空值(使用循环?)

熊猫在 to_json 时删除空值

用python.检查“影片名称”字段为空值的+数据,给该字段填充数+据"unnamed"?