我有一个数据框,需要将相同的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 :(“预期的字符串或缓冲区”,发生在索引col1处)
答案 0 :(得分:2)
使用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