我有一个数据框,需要将相同的 lambda 函数应用于多个列。
示例数据:
col1 col2 col3
xxx;#2;yyy zzz;#46;zyzcz 1
aaa;#3;bbbccc bbbb;cccc;dd#5 2
我需要清理,结果应如下:
col1 col2 col3
xxx;yyy zzz;zyzcz 1
aaa;bbbccc bbbb;cccc;dd 2
我使用的功能:
def cleanDigit(row):
replacements = [('\d', ''), ('#', ''), (';;', ';')]
for (old, new) in replacements:
row = re.sub(old, new, row)
return row
将函数应用于多列的代码:
df[['col1', 'col2']] = df[['col1', 'col2']] .apply(lambda r: cleanDigit(r))
错误消息:
TypeError: ('expected string or buffer', u'occurred at index col1')
最佳答案
使用DataFrame.applymap
,lambda 函数也应该省略并仅传递函数:
df[['col1', 'col2']] = df[['col1', 'col2']].applymap(cleanDigit)
print (df)
col1 col2 col3
0 xxx;yyy zzz;zyzcz 1
1 aaa;bbbccc bbbb;cccc;dd 2
关于python - 如何将 lambda 函数应用于多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57520224/