pandas DataFrame中经常出现SettingWithCopyWarning

  统计/机器学习 Python    浏览次数:23710        分享
3

对DataFrame中一些行或者列重新赋值的时候,经常出现

SettingWithCopyWarning

请问大家一般都是怎么处理的?


 

七号信仰   2017-12-26 21:24



   2个回答 
18

如果你对原先的dataframe先进行slicing或者indexing,然后赋值,都会出现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


情形二

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

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先进行copy,然后再赋值

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


SofaSofa数据科学社区DS面试题库 DS面经

宽宽   2017-12-30 10:30

谢谢! - 七号信仰   2018-01-07 17:30
感谢,很有帮助! - lilsummer   2019-08-03 03:31
3

尝试用iloc或者loc来索引,比如


# 替换'norm'列
df.loc[:,'norm'] = np.random.randn(10)

# 替换第十列
df.iloc[:,10] = np.random.randn(10)


SofaSofa数据科学社区DS面试题库 DS面经

s3040608090   2017-12-29 16:41



  相关讨论

pandas新建一个只有一行的dataframe时结果返回空的dataframe

使用pandas.to_datetime转化文本到时间戳时怎么只保留日期?

pandas按照两列sort_values,一个升序一个降序

怎么把一个pandas数据框用append的方式添加到现有的csv文件?

pandas报错ValueError: Cannot convert non-finite values (NA or inf) to integer

pandas中某列中数字后边有 亿/万这种单位 如何处理

pandas DataFrame去掉重复的行

统计pandas数据框一个列字符串中每个字符串出现的次数?

怎么对pandas dataframe按照一列的字符串的长度来排序?

pandas的groupby报错:ValueError: Length of values does not match length of index

  随便看看

K-means怎么选K?

特征归一化对K Means有影响吗?

如何理解VC dimension?

为什么机器学习中的优化问题很少用到牛顿法?

Resnet-18, Resnet-50, Resnet-101这些模型里的数字是什么意思?