基本Python查询

基本Python查询,python,pandas,Python,Pandas,有人能帮我了解一下下面的语法吗 我有一个pandas.DataFramedf,想要执行: 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_Stag

有人能帮我了解一下下面的语法吗

我有一个
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().
文件“”,第1行,在
如果(df[‘合同阶段’]=“阶段1”):

文件“C:\Program Files\Anaconda3\lib\site packages\pandas\core\generic.py”,第892行,非零__ .format(self.\uuuuuu class.\uuuuuuu.\uuuuuu name.\uuuuuuuuu)) ValueError:序列的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all()。
df['Contract\u Stage']==“Stage 1”
将输出一个向量
True
False
,其形状为(df.shape[0],1)

因此,如果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
这意味着:

  • 对于条件
    df['Contract\u Stage']==“Stage 1”
    True
    的所有行,您将获得列
    'daystocontractedend'
    ,并将其分配给临时变量
    stage1
  • stage1
    中,用
    600
    填充na
  • 您将替换列
    “DaysToContractEnd”
    ,用于 条件
    df['Contract_Stage']==“Stage 1”
    by
    stage1

问题不在于语法(尽管您发布的内容中的缩进是错误的;我认为它在实际代码中是正确的)。错误消息告诉您该做什么-您尝试过它所建议的吗?是的,缩进在实际代码中是正确的。但我对python非常陌生。试图理解错误,但无法得到它。你能帮我解决这个问题吗?我修正了缩进。不相关,但是你可以使用
dict
这样的
{“Stage 1”:600,“Stage 2”:350,…}
C:\Program Files\Anaconda3\lib\site packages\pandas\core\generic.py:3191:SettingWithCopyWarning:试图在数据帧切片的副本上设置值请参见文档中的注意事项:self.\u update\u inplace(新数据)