为何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
差异原因
- 循环对象搞错了:
fx函数里的x["A"]是当前行的完整字符串(比如第一行是"AB,CD"),但你加了for i in x["A"],这会把字符串拆成单个字符逐个遍历,相当于把"AB,CD"拆成了'A'、'B'、','、'C'、'D'。 - 分隔符用错了:原数据里的分隔符是英文逗号
",",但你写的是中文逗号",",导致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
相关产品推荐
相关产品推荐

