pandas DataFrame中经常出现SettingWithCopyWarning

  统计/机器学习 Python    浏览次数: 5298
1

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

SettingWithCopyWarning

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


 

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



   2个回答 
6

如果你对原先的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


宽宽   2017-12-30 10:30

谢谢! - 七号信仰   2018-01-07 17:30
2

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


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

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


s3040608090   2017-12-29 16:41



  相关主题

将pandas DataFrame保存成本地txt并删去列名   1回答

怎么利用pandas获得一个列联表(contingency table)?   1回答

pandas读取csv文件遇到UnicodeDecodeError   2回答

如何对pandas dataframe的行做循环?   3回答

去掉pandas DataFrame的index的名字   2回答

pandas dataframe insert报错ValueError: unbounded slice   1回答

pandas DataFrame去掉重复的行   1回答

把pandas df写入csv时UnicodeEncodeError   1回答

怎么把pandas dataframe中的一列转成一个list?   3回答

pandas读取文件夹中所有的csv文件   1回答

将pandas.DataFrame中的-1全部换成0   1回答

pandas读取csv中指定的某些列   2回答



回答问题时需要注意什么?

我们谢绝在回答前讲“生动”的故事。

我们谢绝“这么简单,你自己想”、“书上有的,你认真看”这类的回答;如果你认为对方的提问方式或者内容不妥,你可以直接忽略该问题,不用进行任何作答,甚至可以对该问题投反对票。

我们谢绝答非所问。

我们谢绝自己不会、硬要回答。

我们感激每一个用户在编写答案时的努力与付出!