Pandas DataFrame疑问:操作复制变量为何同步修改原DataFrame
解决Pandas DataFrame赋值后原数据被同步修改的问题
这绝对是用Pandas处理数据时新手最容易踩的“隐形坑”!你遇到的问题本质是视图(View)和副本(Copy)的区别——直接把df的部分数据赋值给df_part时,默认并没有创建独立的数据副本,而是让df_part指向了原df中同一块内存区域的数据,所以操作df_part时,原df的数据也会跟着变化。
为什么会这样?
Pandas为了提升性能,默认对切片、过滤等操作返回的是原数据的视图(相当于“引用”),而不是全新的副本。这种设计在处理大型数据集时能节省内存,但如果没注意到这一点,很容易不小心修改了原始数据——尤其是医疗数据这种对准确性要求极高的场景,后果可能很麻烦。
怎么解决?
只需要在赋值时显式创建深拷贝,让df_part成为完全独立的数据集:
使用
copy()方法创建深拷贝(推荐,适用于所有场景)# 假设你要提取原df的某几列或者某行数据 df_part = df[['患者ID', '诊断结果', '年龄']].copy() # 现在对df_part做任何修改,都不会影响原df了 df_part['年龄'] = df_part['年龄'].fillna(0)如果你的数据列都是不可变类型(比如整数、字符串),也可以用浅拷贝(但不推荐医疗数据场景)
df_part = df[['患者ID', '诊断结果']].copy(deep=False)浅拷贝只会复制数据的引用,不会复制底层的数值,虽然更省内存,但如果后续修改的是嵌套类型的数据(比如列表、字典),还是会影响原数据。
常见误区避坑
别用这种直接赋值的方式,这只会创建视图:
# 错误示例:这样df_part是原df的视图,修改会影响原数据 df_part = df.iloc[:, 0:3] df_part = df[df['诊断结果'] == '阳性']
内容的提问来源于stack exchange,提问作者BeCurious
相关产品推荐
相关产品推荐

