为什么自定义Pandas函数无法修改DataFrame并返回追加行后的结果?
问题原因与解决方案
核心问题
pandas 中的append()方法不会修改原DataFrame对象,而是将追加后的结果作为新的DataFrame返回,你没有把执行追加后的结果赋值给变量,所以深拷贝得到的d2自始至终都没有被修改,返回的自然还是和原数据一致的内容。
修正后的代码
目前append()方法从pandas 1.4.0版本开始已被官方标记为弃用,推荐使用pd.concat()完成合并操作,修正代码如下:
import pandas as pd df1 = pd.DataFrame({"a":[1, 2, 3, 4], "b":[5, 6, 7, 8]}) def append_function(d1): d2 = d1.copy(deep=True) display(d2) df2 = pd.DataFrame({"a":[12, 22, 33], "b":[51, 62, 73]}) # 接收合并后的新DataFrame赋值给d2 d2 = pd.concat([d2, df2], ignore_index=True) display(d2) return d2 df3 = append_function(df1) display(df3)
补充说明
- 如果你仍在使用低版本pandas要使用
append(),只需把追加行的代码改为d2 = d2.append(df2, ignore_index=True)即可,但不推荐长期使用已废弃的接口。 - 加上
ignore_index=True参数会重置合并后DataFrame的行索引,避免出现重复的索引值,你可以根据实际需求决定是否添加该参数。
内容的提问来源于stack exchange,提问作者Giamma Fer
相关产品推荐
相关产品推荐

