Pandas SettingWithCopyWarning:试图在 DataFrame 中的切片副本上设置值

Posted

技术标签:

【中文标题】Pandas SettingWithCopyWarning:试图在 DataFrame 中的切片副本上设置值【英文标题】:Pandas SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame 【发布时间】:2016-02-17 02:18:30 【问题描述】:

在以下情况下,我不断收到主题中的警告:

第 1 步:

df.rename(columns='one':'one_a', inplace=True)

第 2 步:

df.drop(['one', 'two', 'three'], axis=1, inplace=True)

我该如何解决?

【问题讨论】:

【参考方案1】:

最简单的解决方法(可能是良好的编程习惯)是不进行就地操作,例如

df2 = df.rename(columns='one':'one_a')

【讨论】:

如果我这样做会怎样? df = df.rename(columns='one':'one_a') 如果我保持原样,在这些情况下可以忽略警告吗? 可以忽略它,但我建议您将新列名列表分配给df.columns。基本上,df.columns = ['list', 'of', 'new', 'names']。而对于df.drop,最好写成df = df.loc[:,['columns', 'to', 'keep']].copy() @VinceBowdren 好吧,我想这是一个口味问题,但就地操作不能很好地与en.wikipedia.org/wiki/Functional_programming【参考方案2】:

我遇到了类似的问题并解决了以下问题:

new_df = df.copy()
new_df.rename(columns='one':'one_a', inplace=True)
new_df.drop(['one', 'two', 'three'], axis=1, inplace=True)

或者你可以这样做

df.is_copy = False

您可能正在使用原始 DF 的副本(例如:在此之前您正在操作您的 DF),这就是您收到警告的原因。更多关于副本:

why should I make a copy of a data frame in pandas

【讨论】:

这可能是我避免这些警告的新策略——大量.copy()标记到我的操作结束【参考方案3】:

一种解决方法是删除 inplace=True,然后使用:

df = df.drop(['one', 'two', 'three'], axis=1)

【讨论】:

以上是关于Pandas SettingWithCopyWarning:试图在 DataFrame 中的切片副本上设置值的主要内容,如果未能解决你的问题,请参考以下文章

Pandas介绍

python pandas怎么用

如何安装pandas

idle中没有pandas

Python pandas用法

python(pandas模块)?