突然出现的dataframe赋值错误

以前使用d = df[['a','b','c']]

d['a'] = 1这类,没有出现错误,突然一天报错

SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

查了好久发现现在正确的打开方式为

d = df[['a','b','c']].copy()

d['a'] = 1

原文:http://sofasofa.io/forum_main_post.php?postid=1001449

如果你对原先的数据帧先进行切片或者索引,然后赋值,都会出现SettingWithCopyWarning。

情形一

d[d['col_1'] == 0]['col_2'] = 1

会出现警告

SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

解决方法,

使用LOC或者ILOC

d.loc[d['col_1'] == 0, 'col_2'] = 1

 

情形二

先从原数据帧取出一个子数据帧,然后再对其中的元素赋值,例如

s = d[d['col_1'] == 0]
s.loc[:, 'col_2'] = 1

就会出现

SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

解决方法,

对子datafame先进行复制,然后再赋值

s = d[d['col_1'] == 0].copy()
s.loc[:, 'col_2'] = 1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值