将标量分配给列时,SettingWithCopyWarning

2024-04-24 13:05:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我用的是熊猫17.1。关于如何处理SettingWithCopyWarning的问题已经被广泛讨论过了,但我不认为the most popular thread这样的方法能够解决我的用例,即为列分配标量。你知道吗

我的代码:

df.loc[:, "some_col_name"] = 0

假设名为“some\u col\u name”的列已经存在;这并不是添加该列(如果这样的语句可以)。你知道吗

它正在生成一个带有copywarning的设置,就我的一生而言,我不知道为什么。你知道吗

当我开始工作的时候df.is\u副本=首先是False,但是如果可能的话,我宁愿每次这样做时都避免使用额外的语句。你知道吗

我做错什么了?你知道吗

谢谢!你知道吗

对johnchase答案的后续响应:df是由groupby语句创建的(见下文),所以我不确定在.copy中添加到何处。我提到的补救方法是有效的,但我必须这么做,这意味着pandas让groupby迭代没有意识到它们是拷贝。(不过,他们是对的?)你知道吗

for some_ix, df in bigger_df.groupby(cols_I_care_about):
    df.loc[:, "some_col_name"] = 0

Tags: the方法namemostdfcolsome语句
1条回答
网友
1楼 · 发布于 2024-04-24 13:05:38

我的猜测是df是一个从以前存在的数据帧创建的数据帧。请参见以下内容:

df_old = pd.DataFrame(data=np.arange(15).reshape(5, 3), columns=['a', 'b', 'c'])
df = df_old[['a', 'c']]
df.loc[:, 'c'] = 0

这将导致SettingWithCopyWarning。下一个代码块不会产生SettingWithCopyWarning

df_old = pd.DataFrame(data=np.arange(15).reshape(5, 3), columns=['a', 'b', 'c'])
df = df_old[['a', 'c']].copy()
df.loc[:, 'c'] = 0

pandas警告您可能正在修改原始数据帧。您可以使用.copy()方法来确保您正在创建一个新的数据帧,而不是像您所做的那样修改原始数据帧或df.is_copy = False。我不同意你的解决方案是一种逃避,但是我更喜欢在创建新的数据帧时使用.copy(),因为它不太容易出错。你知道吗

相关问题 更多 >