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

为何Pandas中lambda相关代码与普通循环返回结果不同?如何修正?

问题:apply+lambda代码与普通循环输出结果差异原因及修正方案

首先创建测试用的DataFrame:

import pandas as pd

df = pd.DataFrame([['AB,CD'],['AB,FJS'],['DG']],
                   index = [1,2,3],columns=['A'])

两段代码输出差异对比

第一段:普通循环代码

for i in df["A"]:
    for n in i.split(","):
        print(n)

返回结果:

AB
CD
AB
FJS
DG

第二段:lambda+apply代码

def fx(x):
    for i in x["A"]:
        for n in i.split(","):
            print(n)
df.apply(lambda x: fx(x), axis = 1)

返回结果:

A
B
,
C
D
A
B
,
F
J
S
D
G

差异原因

  1. 循环对象搞错了:fx函数里的x["A"]是当前行的完整字符串(比如第一行是"AB,CD"),但你加了for i in x["A"],这会把字符串拆成单个字符逐个遍历,相当于把"AB,CD"拆成了'A'、'B'、','、'C'、'D'。
  2. 分隔符用错了:原数据里的分隔符是英文逗号",",但你写的是中文逗号",",导致split方法根本拆分不了字符串,只能把每个字符当成单独元素处理,最终就出现了逐个打印字符的情况。

修正方法

直接对当前行的A列值进行拆分,去掉多余的字符循环,同时把分隔符改成英文逗号:

def fx(x):
    # 直接取当前行A列的字符串,按英文逗号拆分后循环打印
    for n in x["A"].split(","):
        print(n)
df.apply(lambda x: fx(x), axis = 1)

嫌麻烦的话也可以不用单独定义函数,直接写在lambda里:

df.apply(lambda x: [print(n) for n in x["A"].split(",")], axis=1)

修改后运行,输出结果就和普通循环完全一致了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 21:33:23