Python 替换数据帧系列中的值(int64)
我已尝试使用下面的代码将“new_col”的值从3更改为1。 首先,生成索引为['a','b']和列名为[x1~x5]的随机矩阵 然后,我又添加了“new_col” 我需要通过列'x1'调用行,因此我运行了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
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,请参阅我对解决方案的编辑,以更新您的更新需求。