如何将Lambda函数应用于多列

时间:2019-08-16 07:02:34

标签: python pandas lambda

我有一个数据框,需要将相同的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处)

1 个答案:

答案 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