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

为何Pandas中loc两种取值操作对原DataFrame的影响不同?

Pandas loc切片的视图与副本差异

场景1:单列索引(字符串)

df = pd.DataFrame({'a':[1,2,3], 'b':[4,5,6]})
df2 = df.loc[:,'a']
df2.loc[0] = 10
print(df)
print(df2)

输出:

a  b
0  10  4
1   2  5
2   3  6
0    10
1     2
2     3
Name: a, dtype: int64

场景2:列表索引(单元素列表)

df = pd.DataFrame({'a':[1,2,3], 'b':[4,5,6]})
df3 = df.loc[:,['a']]
df3.loc[0] = 10
print(df)
print(df3)

输出:

a  b
0  1  4
1  2  5
2  3  6
    a
0  10
1   2
2   3

核心原因:视图(View) vs 副本(Copy)

  • 第一种写法 df.loc[:,'a'] 返回的是原DataFrame对应列的视图(Series类型),它和原数据共享内存空间。修改df2时本质是直接操作原DataFrame的底层数据,所以原df会同步变化。
  • 第二种写法 df.loc[:,['a']] 返回的是原数据的副本(DataFrame类型),相当于基于原数据的指定列新建了一个独立的数据集。修改df3只会改动这个新对象,和原df完全无关。

直白点说:用单个字符串取列拿到的是原数据的“引用”,用列表取列拿到的是原数据的“快照”。

内容的提问来源于stack exchange,提问作者Serge Kashlik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 18:12:46