如何解决将函数应用于数据框时为什么会出现错误?
def function(s):
if (s['col1'] == 'something1')|(s['col1'] == 'smth2')|(s['col1'] == 'smth3'):
return 'A'
elif (s['col1'] == 'smth4')|(s['col1'] == 'smth5'):
return 'B'
elif (s['col1'] == 'smth6')|(s['col1'] == 'smth7'):
return 'C'
else:
return 'D'
以上功能起作用。但是当我将其应用于数据框时:
df['new_col'] = df.apply(function,axis = 1)
我得到:
TypeError: ("'bool' object is not callable",'occurred at index 0')
解决方法
对于我来说工作正常,这里是使用Series.isin
和numpy.select
的替代解决方案:
df = pd.DataFrame({
'col1':['something1','jeff bridges','smth7','billy boy','smth5']})
print (df)
def function(s):
if (s['col1'] == 'something1')|(s['col1'] == 'smth2')|(s['col1'] == 'smth3'):
return 'A'
elif (s['col1'] == 'smth4')|(s['col1'] == 'smth5'):
return 'B'
elif (s['col1'] == 'smth6')|(s['col1'] == 'smth7'):
return 'C'
else:
return 'D'
df['new_col'] = df.apply(function,axis = 1)
m1 = df['col1'].isin(['something1','smth2','smth3'])
m2 = df['col1'].isin(['smth4','smth5'])
m3 = df['col1'].isin(['smth6','smth7'])
df['new_col1'] = np.select([m1,m2,m3],['A','B','C'],default='D')
print (df)
col1 new_col new_col1
0 something1 A A
1 jeff bridges D D
2 smth7 C C
3 billy boy D D
4 smth5 B B
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。