修改pandas中的单个列时的SettingWithCopyWarning

时间:2017-04-28 15:30:21

标签: python pandas

我最近开始使用pandas进行数据操作。我在修改单个列(条带化空格和删除字符)时得到了SettingWithCopyWarning,如下所示:

dframe['title'] = dframe['title'].str.strip()
dframe['title'] = dframe['title'].str.upper().replace([";", ":"], "", regex=True)

之前我已导入excel文件并使用df.iloc[]选择我想要使用的列,并重命名列。我已经尝试将df.iloc[]分配给新变量并且警告会一直显示。由于我刚开始使用大熊猫,我不想立即忽略这个警告,因为我想,有更好的方法可以做到这一点。

警告:

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
  dframe['title'] = dframe['title'].str.upper().replace([";", ":"], "", regex=True)
c:/file.py:45: 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

2 个答案:

答案 0 :(得分:0)

尝试使用apply而不是直接对切片执行转换。

您的代码变为:

dframe['title'] = dframe['title'].apply(lambda x: str(x).strip())
dframe['title'] = dframe['title'].apply(lambda x: str(x).upper().replace(":", "").replace(";", ""))

答案 1 :(得分:0)

我认为如果你在两边都应用 .loc,你应该能够摆脱警告。

dframe.loc[:, 'title'] = dframe.loc[:, 'title'].str.strip()

请让我知道它是否有效,因为这个警告对我来说已经很多次了,而且对于许多其他人来说也是如此:)