pandas DataFrame中经常出现SettingWithCopyWarning

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

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

SettingWithCopyWarning

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


 

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



   2个回答 
10

如果你对原先的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面经 问答 实战

宽宽   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)


SofaSofa数据科学社区 DS面经 问答 实战

s3040608090   2017-12-29 16:41



  相关主题

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

pandas读取文件的前几行   1回答

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

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

把pandas df写入csv时UnicodeEncodeError   1回答

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

如何把一个pandas的dataframe的columns转换成list   2回答

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

如何复制一个pandas DataFrame   1回答

找到pd.DataFrame中某个列名对应的下标?   1回答

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

pandas的DataFrame如何插入带有index的行数据?   1回答



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

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

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

我们谢绝答非所问。

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

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