pandas DataFrame中经常出现SettingWithCopyWarning

  统计/机器学习 Python    浏览次数: 2158
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.DataFrame的index重新排列(从0开始)   2回答

pandas里index的问题   1回答

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

pandas DataFrame去掉重复的行   1回答

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

把pandas.DataFrame中所有行全部随机排列   2回答

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

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

pandas pop KeyError求帮助!   3回答

如何复制一个pandas DataFrame   1回答

怎么把pyspark RDD dataframe转为pandas.DataFrame?   1回答

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



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

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

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

我们谢绝答非所问。

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

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