2017-03-03 16 views
1

誰でも以下の構文で助けてくれますか?Pythonの基本的なクエリ

は私が持っている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_Stage']=="Stage 3"): 
    df['DaysToContractEnd'].fillna(150, inplace=True) 
elif(df['Contract_Stage']=="Stage 4"): 
    df['DaysToContractEnd'].fillna(-30, inplace=True) 

エラー:TrueまたはFalseのベクトルは、その形状がある

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

問題は構文ではありません(あなたが投稿したものはインデントが間違っていますが、実際のコードでは正しいと思います)。エラーメッセージは何をすべきかを示します - それが示唆したことを試しましたか? –

+0

はい、インデントは実際のコードでは正しいです。しかし、私は非常にPythonに新しいです。エラーを理解しようとしましたが、それを取得できませんでした。これで私を助けてもらえますか? –

+0

インデントを修正しました。 – Alfe

答えて

2

df['Contract_Stage'] == "Stage 1"意志出力(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には、600と入力してください。
  • の条件df['Contract_Stage'] == "Stage 1"Trueで、stage1のすべての行に対して、列'DaysToContractEnd'を置き換えます。
+0

C:\ Program Files \ Anaconda3 \ lib \ site -packages \ pandas \ core \ generic.py:3191:SettingWithCopyWarning: DataFrameからスライスのコピーに値を設定しようとしています ドキュメントの警告を参照してください:http://pandas.pydata.org /pandas-docs/stable/indexing.html#indexing-view-versus-copy self._update_inplace(new_data) –

+0

私の答えを編集しました – arthur