对DataFrame中一些行或者列重新赋值的时候,经常出现
SettingWithCopyWarning
请问大家一般都是怎么处理的?
2个回答
如果你对原先的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
谢谢!
-
七号信仰
2018-01-07 17:30
感谢,很有帮助!
-
lilsummer
2019-08-03 03:31
尝试用iloc或者loc来索引,比如
# 替换'norm'列
df.loc[:,'norm'] = np.random.randn(10)
# 替换第十列
df.iloc[:,10] = np.random.randn(10)
相关讨论
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 dataframe按照一列的字符串的长度来排序?
pandas的groupby报错:ValueError: Length of values does not match length of index
随便看看