pandas中警告SettingWithCopyWarning

import pandas as pd

data = pd.read_csv('data.csv')
ind = [1,2,3,4]
test_save_tensor = new_series
data_normal_smiles = data.iloc[ind, :]
data_normal_smiles.loc[:, 'tensors'] = new_series

pandas中警告SettingWithCopyWarning_第1张图片

这边报了一个 SettingWithCopyWarning, 下面推荐用 .loc[row_indexer, col_indexer] ,但是我第七行已经是用 .loc 方法了啊。。。(原来用的是 data_normal_smiles['tensors']=new_series) ,也是报警告的。

什么原因呢,查了一下,这是出现链式索引的问题(chained indexing)。在第六行我们获取了 data 的某几行 data_normal_smiles (称作view)。紧接着第七行就对 data_normal_smiles 新添加一列。这个时候pandas就疑惑了,data 中要不要也添加一列呢?因为我们没有在第六行显式指定 data_normal_smilesdata 那几行的一个副本(copy)。所以pandas当然也可以认为我们想做 data.iloc[ind, :]['tensors']=new_series

这个时候我们就明白pandas为什么要推荐使用 loc 方法了,他的意思其实是,如果我们想做 data.iloc[ind, :]['tensors']=new_series 的话,那么应该用 data.iloc[ind, 'tensors']=new_series,而不是两次切片(chained indexing)。

但我们原意并非要改变data,data在取过那几行之后已经没有价值了,不用改变。这个时候我们需要的是创建 data 那几行的一个副本:data_normal_smiles=data.iloc[ind, :].copy() 。把第六行换成这个,第七行就不会报警告了。因为pandas明确了,我们改变的只是 data_normal_smiles ,不改变 data

你可能感兴趣的:(#,pandas,&,numpy,&,matplotlib,Python,pandas,python,机器学习)