为何pandas.DataFrame.apply返回相同行?代码问题解析
问题原因分析
核心问题出在你写的lambda s: [s]里——这里的s是Pandas迭代行时复用的同一个Series对象。
当用df.apply(..., axis=1)逐行处理数据时,Pandas不会为每一行单独创建新的Series实例,而是反复用同一个Series,每次迭代只更新它内部的值。你返回的[s]是包含这个复用对象的列表,所以所有行的列表最终都指向了最后一次迭代更新后的Series,也就是最后一行的3和z,自然输出全是相同内容。
正确写法示例
如果要正确返回每行对应的内容,可以把Series转成列表,或者复制一个新的Series:
# 方法1:将Series转为普通列表 df.apply(lambda s: list(s), axis=1) # 方法2:复制Series后再放入列表 df.apply(lambda s: [s.copy()], axis=1)
运行后会得到正确的输出:
0 [1, x] 1 [2, y] 2 [3, z] dtype: object
内容的提问来源于stack exchange,提问作者max
相关产品推荐
相关产品推荐

