You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:15:13