【问题标题】:Subtracting Pandas columns caveat减去 Pandas 列警告
【发布时间】:2021-10-30 22:41:16
【问题描述】:

这个问题有很多类似的问题,但我找不到能具体回答我问题的问题。

首先,当我运行这样的东西时

df['new_col'] = df['col2'] - df['col1']

我收到一条警告,提示“正在尝试在 DataFrame 的切片副本上设置值。请尝试改用 .loc[row_indexer,col_indexer] = value”。

如果我然后尝试运行这样的东西

df.loc[:, 'new_col'] = df['col2'] - df['col1']

我收到“SettingWithCopyWarning”警告,并显示相同的消息“正在尝试在 DataFrame 的切片副本上设置值。请尝试改用 .loc[row_indexer,col_indexer] = value”。

使用其他帖子中一些答案所建议的 apply 和 lambda 函数会引发“SettingWithCopyWarning”警告,而且操作似乎也很慢。

df.loc[:, 'new_col'] = df.apply(lambda x: x['col2'] - x['col1'], axis=1)

我阅读了文档页面,但恐怕我不完全理解它们,否则我会很清楚进行这种计算的正确格式是什么。

是的,所以我的问题是:如何减去 Pandas 数据框的列,以正确的方式为同一数据框创建一个新的,以便 Pandas 满意?谢谢!

【问题讨论】:

  • 警告是因为 Pandas 无法判断计算是视图还是新数组(视图可以更改原始数据帧的数据)。一种方法是进行显式复制,或者使用assign 方法(在内部进行复制;如果您要创建多个列,这是有效的,因为复制只进行一次)
  • 问题不是df['new_col'] = df['col2'] - df['col1']。问题出在此操作的上游。您必须在此行之前发布您的代码。一个有用的链接:dataquest.io/blog/settingwithcopywarning
  • 谢谢大家,这有帮助!

标签: python pandas dataframe warnings


【解决方案1】:

尝试添加df = df.copy():

df = df.copy()
df['new_col'] = df['col2'] - df['col1']

【讨论】:

    猜你喜欢
    • 2019-06-07
    • 2018-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多