我正在使用像这样的pandas'apply'函数:
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'
由于语法不起作用,如何在函数内执行空检查
答案 0 :(得分:2)
您可能要考虑使用内置函数的熊猫来执行检查。
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]
。
答案 1 :(得分:1)
将您(row[colName] ==null)
更改为
np.isnan(row[colName])
答案 2 :(得分:0)
嗯...如果我理解正确,null
是C / Java语法。您可能正在寻找None
。
在pandas
中,this answer应该更适合您。