Python 熊猫:无法基于其他列上的条件设置单元格值
我有一个数据框,如下所示:Python 熊猫:无法基于其他列上的条件设置单元格值,python,Python,我有一个数据框,如下所示: ID Score Bid_Doc_ID 1 67 3 2 -1 2 3 -1 7 我想将Bid\u Doc\u ID字段设置为-1,其中Score=-1 为此,我使用以下代码: df = df.loc[df['Score']==-1,'Bid_Doc_ID']=-1 我得到了以下错误: AttributeError: 'int' object has no attribute 'loc'
ID Score Bid_Doc_ID
1 67 3
2 -1 2
3 -1 7
我想将Bid\u Doc\u ID
字段设置为-1,其中Score
=-1
为此,我使用以下代码:
df = df.loc[df['Score']==-1,'Bid_Doc_ID']=-1
我得到了以下错误:
AttributeError: 'int' object has no attribute 'loc'
就连我也试过:
df = df.loc[df['Score'].astype(str)==-1,'Bid_Doc_ID']=-1
仍然得到相同的错误
我的预期结果:
ID Score Bid_Doc_ID
1 67 3
2 -1 -1
3 -1 -1
这个问题似乎很琐碎,但我有点遗漏了一些东西 尝试删除分配新的
df
的代码部分:
df = df.loc[df['Score']==-1,'Bid_Doc_ID']=-1 # change
df.loc[df['Score']==-1,'Bid_Doc_ID']=-1 # to be this
或者,您也可以使用np.where
import numpy as np
df['Bid_Doc_ID'] = np.where(df['Score'] == -1, -1, df['Bid_Doc_ID'])
当您运行
df=df.loc[df['Score'].astype(str)=-1,'Bid\u Doc\u ID']=-1
时,您似乎用整数或布尔值重写了df(这就是'int'对象没有属性'loc'
错误的原因)。尝试检查df的值以验证这一点
如果您在适当的位置修改DF,会发生很多情况,这绝不是一个好主意,最好将修改后的数据帧分配给一个新变量,例如,DF\u fixed
,这将节省您大量的调试时间,甚至更糟的是,在生产中释放bug
尝试下面的方法,虽然不太简洁,但它使用了纯熊猫方法和方法链接,这是目前推荐的方法
投标文件id固定=df.apply(λx:-1,如果x['Score']=-1,否则x['bid\u doc\u id'],轴=1)
df\U fixed=df.assign(投标文件ID=Bid\U文件ID\U fixed)
尝试删除第一个df=
。只需df.loc[df['Score']=-1,'Bid\u Doc\u ID']=-1
此更新已完成,您无需将其分配回df。删除df=part是否有人被错误消息弄糊涂了?我试过x=[1,2];x=x[0]=[2,3];打印(x)
,并且不希望输出[…],3]
没有错误。