pandas 报警告:A value is trying to be set on a copy of a slice from a DataFrame

本文探讨了在Pandas中遇到'A value is trying to be set on a copy of a slice from a DataFrame'警告的原因,重点介绍了通过深拷贝避免警告并保持数据修改有效性的方法,以及提供了一种不引发警告的DataFrame操作示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

pandas 报警告:A value is trying to be set on a copy of a slice from a DataFrame

我在抽取了原来DataFrame数据的几列后,对抽取后的数据进行赋值操作时弹出这个警告。

这个警告的后果是可能导致修改pandas 单元格中的数据失败。

样例代码如下

# 弹出警告的代码
dfc = pd.DataFrame({'a':[1,2,3,4,5,6],'b':[2,3,4,5,6,7]})
dfc2 = dfc[['a']]
dfc2['a'][0] = 100

解决方法一

这个是深浅拷贝的警告

我对其进行一次深拷贝即可解决,这种方式可能会失效

# 不 弹出警告的代码
dfc = pd.DataFrame({'a':[1,2,3,4,5,6],'b':[2,3,4,5,6,7]})
dfc2 = dfc[['a']]
dfc2 = dfc2.copy() # 进行一次拷贝
dfc2['a'][0] = 100

解决方法二

换一种方式对 pandas 单元格进行修改

dfc = pd.DataFrame({'a':[1,2,3,4,5,6],'b':[2,3,4,5,6,7]})
dfc2 = dfc[['a','b']]
# 这个命令不会警告
dfc2.loc[3, 'b'] = 'english'

注意: loc 有一个很类似的api,即iloc ,但我在使用 dfc2.iloc[0][0] =111 修改单元格数据时弹出警告,而且修改数据失败。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值