pandas DataFrame中经常出现SettingWithCopyWarning

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

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

SettingWithCopyWarning

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


 

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



   2个回答 
4

如果你对原先的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里index的问题   1回答

pandas.DataFrame的index重新排列(从0开始)   2回答

如何复制一个pandas DataFrame   1回答

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

如何重命名pandas的dataframe的列名   2回答

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

pd.dataframe怎么同时对两个key排序?   1回答

行数很多的pandas DataFrame如何在jupyter中完整显示?   1回答

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

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

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

pandas DataFrame去掉重复的行   1回答



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

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

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

我们谢绝答非所问。

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

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