Python 复制警告熊猫

Python 复制警告熊猫,python,pandas,Python,Pandas,我知道视图与复制的问题以及熊猫显示警告的原因。这使我更加小心地使用、loc、.ix等,而不是链式索引 然而,当我确信自己不应该这样做时,我会发出警告。我有一个包含我的数据的数据框“df”,我有一个函数: def my_func(df): df['new_channel'] = df.channel.diff() return df my_func(df2) 如果运行此函数,则不会收到任何警告。但是,如果我从原始数据帧定义一个新的数据帧,如下所示: df2 = df.ix[df

我知道视图与复制的问题以及熊猫显示警告的原因。这使我更加小心地使用、loc、.ix等,而不是链式索引

然而,当我确信自己不应该这样做时,我会发出警告。我有一个包含我的数据的数据框“df”,我有一个函数:

def my_func(df):
    df['new_channel'] = df.channel.diff()
    return df
my_func(df2)
如果运行此函数,则不会收到任何警告。但是,如果我从原始数据帧定义一个新的数据帧,如下所示:

df2 = df.ix[df.channel==val,:]
调用函数:

def my_func(df):
    df['new_channel'] = df.channel.diff()
    return df
my_func(df2)
然后生成复制警告。但我的理解是,我没有在函数中使用任何链式索引,也没有使用链式索引来创建第二个数据帧

这是假阳性吗?即,我可以关闭警告并继续。还是我错过了一些更基本的东西,而这些东西将来可能会咬我


Ben

我非常肯定他们实施这一警告的方式是非常自由的,而这个案例是一个假阳性。但是,如果您想确保,如果您尝试在一个最小的示例中复制它,我们可以复制粘贴并运行它,这将非常有用。该函数比一般示例更复杂,如果我将整个过程作为一个脚本运行,而顶部没有def():则不会出错。所以我怀疑(希望?)你是对的。如果你把它看作是一个组合步骤,那么你在做
df.ix[df.channel==val,:]['new_channel']=…
,这就是链式索引。这并不一定意味着它不起作用,但它可以解释警告的产生。如果您想避免它,并且如果您不想在修改
df2
时修改原始
df
,您可以在子集
df
时添加
.copy()
df2=df.ix[df.channel==val,:].copy()
Joris-感谢您的回复。非常清楚。有趣的是,在通过
df2=df.ix[df.channel==val,:].reindex()
重置索引后,添加一个新列并不会给出警告。我很确定他们实现此警告的方式非常自由,而这种情况是误报。但是,如果您想确保,如果您尝试在一个最小的示例中复制它,我们可以复制粘贴并运行它,这将非常有用。该函数比一般示例更复杂,如果我将整个过程作为一个脚本运行,而顶部没有def():则不会出错。所以我怀疑(希望?)你是对的。如果你把它看作是一个组合步骤,那么你在做
df.ix[df.channel==val,:]['new_channel']=…
,这就是链式索引。这并不一定意味着它不起作用,但它可以解释警告的产生。如果您想避免它,并且如果您不想在修改
df2
时修改原始
df
,您可以在子集
df
时添加
.copy()
df2=df.ix[df.channel==val,:].copy()
Joris-感谢您的回复。非常清楚。有趣的是,通过
df2=df.ix[df.channel==val,:].reindex()
重置索引后,添加新列不会发出警告。