将新值赋给重复(或多个)的目标元素到数据帧

2024-05-16 11:27:46 发布

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

我有一个数据帧:

df = pd.DataFrame({'AKey':[1, 9999, 1, 1, 9999, 2, 2, 2],\
    'AnotherKey':[1, 1, 1, 1, 2, 2, 2, 2]})

我想给一个特定的列指定一个新的值,并为该列中具有特定值的每个元素指定一个新的值

假设我想将新值8888赋给具有值9999的元素。 我尝试了以下方法:

df[df["AKey"]==9999]["AKey"]=8888

但它返回以下错误:

A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead

所以我试着用loc

df.loc[df["AKey"]==9999]["AKey"]=8888

返回了相同的错误

我很感激你对这个错误的帮助和解释,因为我实在想不起来


Tags: 数据方法元素dataframedfisvalue错误
2条回答

您可以这样使用loc:

df.loc[df["AKey"]==9999, "AKey"] = 8888

产生以下输出:

enter image description here

在使用原始代码时,首先要使用以下代码对数据帧进行切片:

df.loc[df["AKey"]==9999]

然后为切片数据帧的列AKey赋值

["AKey"]=8888

换句话说,您是在更新切片,而不是数据帧本身

来自熊猫documentatiom

.loc[] is primarily label based, but may also be used with a boolean array.

分解代码:

df.loc[df["AKey"]==9999, "AKey"]

df[“AKey”]==9999将返回一个标识行的布尔数组,字符串“AKey”将标识将立即接收新值的列,而不进行切片

好吧,我找到了解决办法。如果我使用逻辑索引来标识列,它就会起作用

df.loc[df["AKey"]==9999& df["AKey"]]=8888

但是,我仍然希望得到关于错误的帮助,因为我还不完全清楚为什么Python认为我是在切片而不是索引

相关问题 更多 >