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

时间:2018-08-17 15:15:19

标签: pandas

我正在使用像这样的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'

由于语法不起作用,如何在函数内执行空检查

3 个答案:

答案 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应该更适合您。