任何人都可以帮我解决下面的语法吗?
我有一个pandas.DataFrame
df
,想要执行:
if (df['Contract_Stage'] == "Stage 1"):
df['DaysToContractEnd'].fillna(600, inplace=True)
elif(df['Contract_Stage']=="Stage 2"):
df['DaysToContractEnd'].fillna(350, inplace=True)
elif(df['Contract_Stage']=="Stage 3"):
df['DaysToContractEnd'].fillna(150, inplace=True)
elif(df['Contract_Stage']=="Stage 4"):
df['DaysToContractEnd'].fillna(-30, inplace=True)
错误:
File "<ipython-input-27-140b902fd3f8>", line 1, in <module>
if (df['Contract_Stage'] == "Stage 1"):
File "C:\Program Files\Anaconda3\lib\site-packages\pandas\core\generic.py", line 892, in __nonzero__
.format(self.__class__.__name__))
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
答案 0 :(得分:2)
df['Contract_Stage'] == "Stage 1"
将输出True
或False
的向量,其形状为(df.shape [0],1)。
因此,当您执行if df['Contract_Stage'] == "Stage 1"
时,无法将其评估为True
或False
你能做的是:
stage1 = df.loc[df['Contract_Stage'] == "Stage 1",'DaysToContractEnd']
stage1.fillna(600, inplace=True)
df.loc[df['Contract_Stage'] == "Stage 1",'DaysToContractEnd'] = stage1
这意味着:
'DaysToContractEnd'
为df['Contract_Stage'] == "Stage 1"
的所有行都会显示列True
,并将其分配给临时变量stage1
。 stage1
中,您使用600
填写na。 'DaysToContractEnd'
列
df['Contract_Stage'] == "Stage 1"
条件True
为stage1
。