我最近开始使用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
答案 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()
请让我知道它是否有效,因为这个警告对我来说已经很多次了,而且对于许多其他人来说也是如此:)