【问题标题】:Pandas copy slice warning appears to be inconsistent?Pandas 复制切片警告似乎不一致?
【发布时间】:2020-10-27 23:09:34
【问题描述】:

我知道有一百万篇关于 Pandas DataFrame 复制切片警告的帖子,我对此进行了研究......但我仍然不明白为什么下面的第 10 行没有调用警告,但下面的第 15 行调用了警告。使用 Python 3.8.3 和 pandas 1.0.5

import pandas as pd

#### Example DataFrame
myid = [1, 1, 1, 2, 2]
myorder = [3, 2, 1, 2, 1]
y = [3642, 3640, 3632, 3628, 3608]
x = [11811, 11812, 11807, 11795, 11795]
df = pd.DataFrame(list(zip(myid, myorder, x, y)), 
                  columns =['myid', 'myorder', 'x', 'y']) 
df.sort_values(by=['myid', 'myorder'], inplace=True) ## LINE 10
df.reset_index(drop=True, inplace=True)

idval =2
tempdf = df[mygdf.myid == idval]
tempdf.sort_values(by=['myid', 'myorder'], inplace=True) ## LINE 15
tempdf.reset_index(drop=True, inplace=True)

【问题讨论】:

    标签: python-3.x pandas


    【解决方案1】:

    这一行:

    tempdf = df[mygdf.myid == idval]

    正在df 上创建一个名为tempdf 的视图,基础数据尚未复制,将tempdf 视为应用于df 的预先记录的过滤器,进一步的更改将仅应用于那些符合过滤条件的行。

    这意味着如果您更新 tempdf,您将更新 df - 因此会出现警告。

    为避免出现警告,您需要执行以下操作,这会强制 dftempdf 使用不同的底层数据结构:

    tempdf = df[mygdf.myid == idval].copy()

    现在对tempdf 的更改将不会影响df,因此您的警告会消失。

    【讨论】:

      猜你喜欢
      • 2012-07-03
      • 1970-01-01
      • 2019-02-13
      • 1970-01-01
      • 2014-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多