带有应用功能的熊猫空值检查
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
添加了两种方式。希望它能回答你的问题!以上是关于带有应用功能的熊猫空值检查的主要内容,如果未能解决你的问题,请参考以下文章