首页 > 解决方案 > Pandas isin 布尔运算符给出错误

问题描述

使用“isin”布尔运算符时遇到错误:

def rowcheck(row):
 return row['CUST_NAME'].isin(['John','Alan'])

我的数据框有 CUST_NAME 列。所以我使用:

df['CUSTNAME_CHK'] = df.apply (lambda row: rowcheck(row),axis=1)

我得到:

'str' object has no attribute 'isin'

我做错了什么?

标签: pandas

解决方案


您在传递给应用的函数中执行此操作,这样就可以row['CUST_NAME']保存特定单元格的值(并且它是一个字符串)。没有isin方法的字符串。此方法属于pd.Series,而不是字符串。

如果你真的要使用apply,请np.isin在这种情况下使用

def rowcheck(row): 
    return pd.np.isin(row['CUST_NAME'], ['John','Alan'])

正如@juanpa.arrivilaga 注意到的那样,isin在这种情况下效率不高,因此建议in直接使用运算符

return row['CUST_NAME'] in ['John','Alan']

请注意,您可能不需要apply. 你可以直接使用pd.Series.isin。例如,

df = pd.DataFrame({'col1': ['abc', 'dfe']})


col1
0   abc
1   dfe

这样你就可以做到

df.col1.isin(['abc', 'xyz'])

0     True
1    False
Name: col1, dtype: bool

推荐阅读