Pandas映射到新列,SettingWithCopyWarning

Ik-*_*Kim 18 python pandas

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

df['new_column'] = df['old_column'].map(lambda x: f(x))
Run Code Online (Sandbox Code Playgroud)

这将给出"SettingWithCopyWarning:正在尝试在DataFrame的切片副本上设置值." 错误.

我尝试了以下方法:

df.loc[:, 'new_column'] = df['old_column'].map(lambda x: f(x))
Run Code Online (Sandbox Code Playgroud)

这没有用.我能做什么?

Ale*_*gur 10

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

你的两个方法调用都没问题.如果您想完全摆脱警告,您可以指定:

pd.options.mode.chained_assignment = None
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅StackOverflow问答.

  • 我建议在触发语句之后放置一个 `pd.options.mode.chained_assignment = 'warn'` ,以便在后续代码中捕获此警告的可能的真实情况。 (2认同)