Python 替换数据帧系列中的值(int64)

Python 替换数据帧系列中的值(int64),python,pandas,dataframe,Python,Pandas,Dataframe,我已尝试使用下面的代码将“new_col”的值从3更改为1。 首先,生成索引为['a','b']和列名为[x1~x5]的随机矩阵 然后,我又添加了“new_col” 我需要通过列'x1'调用行,因此我运行了df[df['x1']==val],然后我想我可以通过运行df[df[df['x1']==val]['new\u col']=1来简单地转换'new\u col'的值 import pandas as pd import numpy as np df = pd.DataFrame(np.r

我已尝试使用下面的代码将“new_col”的值从3更改为1。 首先,生成索引为['a','b']和列名为[x1~x5]的随机矩阵 然后,我又添加了“new_col”

我需要通过列'x1'调用行,因此我运行了
df[df['x1']==val]
,然后我想我可以通过运行
df[df[df['x1']==val]['new\u col']=1来简单地转换'new\u col'的值

import pandas as pd
import numpy as np


df = pd.DataFrame(np.random.randint(0,10, size = (2,5)), index = ['a','b'], columns = ['x1','x2','x3','x4','x5'])

df['new_col'] = [3,1]

val = df['x1'].iloc[0]

df[df['x1']==val]['new_col'] = 1
display(df)

但是,它不会改变任何错误

__main__:1: SettingWithCopyWarning: 
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

See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy

您的方法接近解决方案,但语法需要稍微更改以避免警告

您可以使用
.loc
,将用于筛选的布尔索引作为第一个参数,将列名作为第二个参数,如下所示:

df.loc[df['new_col']==3, 'new_col'] = 1
演示

编辑 根据评论中的更新要求:


我真正需要做的是,首先找到'x1'==4(在 您的解决方案),然后相应地更改该行中的新列

我们可以使用:

df.loc[df['x1']==4, 'new_col'] = 1

您的方法接近解决方案,但语法需要稍微更改以避免警告

您可以使用
.loc
,将用于筛选的布尔索引作为第一个参数,将列名作为第二个参数,如下所示:

df.loc[df['new_col']==3, 'new_col'] = 1
演示

编辑 根据评论中的更新要求:


我真正需要做的是,首先找到'x1'==4(在 您的解决方案),然后相应地更改该行中的新列

我们可以使用:

df.loc[df['x1']==4, 'new_col'] = 1

我不知道这是否是您想要的,但这可能是一个解决方案:

df["new_col"] = np.where(df["x1"]==val,1,df["new_col"])

因此,对于每个位置,其中x1列中的行==val,返回1;否则返回new_col的值

我不知道这是否是您正在寻找的,但这可能是一个解决方案:

df["new_col"] = np.where(df["x1"]==val,1,df["new_col"])

因此,对于每个位置,其中x1列中的行==val,返回1;否则返回new_col的值

您是否尝试过按照错误消息的建议执行操作?(即,改用
loc
)@fakedad是的,它什么也不做。您是否尝试过按照错误消息的建议进行操作?(即,改为使用
loc
)@fakedad是的,它什么都不做。我真正需要做的是,首先找到“x1”==4(在您的解决方案中)的行,然后相应地更改该行中的新列。@Brianley Brian,请参阅我对解决方案的编辑,以更新您的更新要求。我真正需要做的是,首先找到“x1”==4的行(在您的解决方案中),然后相应地更改该行中的新列。@Brianley Brian,请参阅我对解决方案的编辑,以更新您的更新需求。