Python调用函数修改DataFrame时如何避免外部原df变量被改动
问题原因
- Pandas的DataFrame属于可变对象,Python给函数传参时默认传递可变对象的内存引用,所以函数内部对传入的DataFrame做修改时,操作的是和外部变量同一块内存空间的数据,自然会修改外部的原始变量。
解决方法
- 只需要在函数内部对传入的DataFrame先做深拷贝,基于拷贝后的新对象做修改即可,不会影响原始数据。
修改后代码如下:
import pandas as pd df = pd.DataFrame({'A': [10, 20, 30]}, index=['2021-11-24', '2021-11-25', '2021-11-26']) def my_function(df_temp): # 新增深拷贝步骤,deep=True表示完全复制数据生成独立的新对象 df_temp = df_temp.copy(deep=True) df_temp['A'][0] = 100 return df_temp something = my_function(df) print(df) # 此时输出原始df不会被修改: # A # 2021-11-24 10 # 2021-11-25 20 # 2021-11-26 30 # 如果你要覆盖原来的df再执行赋值即可 # df = my_function(df) # print(df)
注意事项
- 不要使用浅拷贝操作,浅拷贝仍然会共享底层数据,修改后还是会影响原始DataFrame。
内容的提问来源于stack exchange,提问作者Soon
相关产品推荐
相关产品推荐

