我正在使用通过子设置前一个创建的数据框“副本” - 见下文:
import random
import pandas as pd
df = pd.DataFrame({'data':list(random.sample(range(10,100),25))})
df_filtered = df.query('data > 20 and data < 80')
df_filtered.rename(columns={'data':'observations'},inplace=True)
问题是,当重命名方法被调用时,我收到一个 SettingWithCopy 警告,据我所知,这意味着我正在对原始(在本例中为 df)对象的副本进行操作。警告文本是:“试图在 DataFrame 的切片副本上设置一个值”
我找到了 this question使用不同的子集化方法回答了这个问题。我自己更喜欢 Dataframe.query() 方法(语法方面)。有没有一种方法可以使用 the.query() 方法而不是我链接的问题中建议的方法来创建新的 Dataframe 对象?我已经尝试了一些 iloc 选项,但到目前为止还没有成功。
最佳答案
您始终可以通过在过滤后的数据帧上调用 .copy()
来显式制作副本。具体来说,替换
df_filtered = df.query('data > 20 and data < 80')
与
df_filtered = df.query('data > 20 and data < 80').copy()
这是否消除了警告?
关于Python Pandas SettingWithCopyWarning 副本与新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38087204/