You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas中lambda函数单列生效、多列应用失效问题求解

Pandas多列使用apply去除空格无效,单列正常

尝试在Pandas DataFrame的多列上用apply()执行去除空格的操作时,数据没有变化,但单列使用apply()却能正常生效,示例代码如下:

import pandas as pd
import copy

# 初始化DataFrame
df = pd.DataFrame ({'a' : ["7  7","5 3"],
                 'b' : ['f o', 'b  r'],
                 'c' : ["77","53"]})
print(df)
# 输出:
#       a     b   c
# 0  7  7   f o  77
# 1   5 3  b  r  53

# 多列apply尝试去除空格,无效果
df[["a","b"]]=df[["a","b"]].apply(lambda x: x.replace(" ",""))
print(df)
# 输出:
#       a     b   c
# 0  7  7   f o  77
# 1   5 3  b  r  53

# 单列apply正常生效
df2=copy.deepcopy(df)
df2["a"]=df2["a"].apply(lambda x: x.replace(" ",""))
print(df2)
# 输出:
#     a     b   c
# 0  77   f o  77
# 1  53  b  r  53

问题原因

对多列(DataFrame)调用apply()时,默认按列维度(axis=0)处理,此时lambda函数中的x是整个列(Series对象)。Series的replace()方法默认是匹配整个元素值进行替换,而非逐元素处理字符串内部的空格。而单列调用apply()时,x是每个字符串元素,因此x.replace(" ","")能正确替换字符串内的空格。

解决方案

方法1:使用applymap()(推荐)

applymap()是Pandas专门用于对DataFrame每个元素执行函数的方法,直接作用于每个单元格:

df[["a","b"]] = df[["a","b"]].applymap(lambda x: x.replace(" ",""))
print(df)

输出:

a    b   c
0  77   fo  77
1  53   br  53

方法2:嵌套apply()处理每列元素

对多列的每个子列(Series)再调用一次apply(),逐元素处理:

df[["a","b"]] = df[["a","b"]].apply(lambda col: col.apply(lambda x: x.replace(" ","")))

方法3:使用矢量化字符串方法str.replace()(高效)

针对字符串类型的列,Pandas提供了str访问器,支持矢量化操作,性能比apply()更好:

df[["a","b"]] = df[["a","b"]].str.replace(" ","")

内容的提问来源于stack exchange,提问作者Holt Dwyer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 14:00:58