【问题标题】:Pandas map to a new column, SettingWithCopyWarning [duplicate]Pandas 映射到新列 SettingWithCopyWarning [重复]
【发布时间】:2017-06-25 15:24:49
【问题描述】:

在 pandas 数据框中,我正在尝试映射 df['old_column'],为每一行应用用户定义的函数 f 并创建一个新列。

df['new_column'] = df['old_column'].map(lambda x: f(x))

这将给出“SettingWithCopyWarning:试图在 DataFrame 中的切片副本上设置值。”错误。

我尝试了以下方法:

df.loc[:, 'new_column'] = df['old_column'].map(lambda x: f(x))

这没有帮助。我能做什么?

【问题讨论】:

  • 在 Pandas 0.19.2 中,在这种情况下似乎不再出现此警告
  • 我在 1.2.0 中仍然收到此警告
  • 警告实际上明确表示尝试使用.loc,但是当遵循该建议时,仍然会发出警告。相当混乱。 (版本 1.2.0)

标签: python pandas


【解决方案1】:

pandas 中的某些操作会引发 SettingWithCopy 警告,这可能不会产生预期结果,因为它们可能作用于副本而不是原始数据集。不幸的是,pandas 本身没有简单的方法来判断一个特定的调用是否会这样做,所以这个警告往往会在很多很多情况下被提出来(从我的角度来看用户)实际上没有任何问题。

您的两个方法调用都很好。如果您想完全摆脱警告,您可以指定:

pd.options.mode.chained_assignment = None

有关更多信息,请参阅this StackOverflow Q&A

【讨论】:

  • 我建议在触发语句之后放置一个pd.options.mode.chained_assignment = 'warn',以便在后续代码中捕捉到此警告的可能真阳性。
猜你喜欢
  • 2014-12-30
  • 1970-01-01
  • 2016-06-08
  • 1970-01-01
  • 2021-07-16
  • 2017-07-15
  • 1970-01-01
  • 2014-10-18
相关资源
最近更新 更多