2017-02-02 11 views
1

dtrainは、次の操作を行うための正しい方法は何ですか?タイプの<class 'pandas.core.frame.DataFrame'>は、いくつかの条件が

とするSettingWithCopyWarningにつながる満足パンダの列の値を置き換え

/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas/core/indexing:

target = dtrain.iloc[:,1] > 0 
dtrain.ix[target, 1] = 0 

は私が警告を受けます.py:477: SettingWithCopyWarning: 値は、DataFrameからスライスのコピーに設定しようとしています。 の.loc [row_indexer、col_indexer] =値を使用してみてくださいではなく、

注: は以前、私はこれがN00B質問かもしれません

dtrain = d.loc[(d.yyyy < 2005) & (d.yyyy >= 1995),:] 

を使用してdtrainを作成します。私は、Pythonに合理的に新たなんだと、まだ深いコピーをトリガーするかの私の頭の中で良いモデルを持っているだけで何のポインタはありません...

+1

私は 'copy'必要だと思う - 。' dtrain = d.loc [(d.yyyy <2005)&(d.yyyy> = 1995),:]コピー() ' – jezrael

+0

@jezraelの感謝を!それは動作します。笑...それはあまりにも簡単なので、私はこの質問を削除する必要がありますか? –

+0

私はあなたのコードを単純化するものがいくつか見つかりますが、それはあなた次第です。 ;) – jezrael

答えて

1

私は最初からコードを簡素化することができると思います。

dtrain = d.loc[(d.yyyy < 2005) & (d.yyyy >= 1995),:] 

へ:

dtrain = d[(d.yyyy < 2005) & (d.yyyy >= 1995)] 

それがboolean indexingと呼ばれています。

とし、copy-see docsを追加します。

dtrain = d[(d.yyyy < 2005) & (d.yyyy >= 1995)].copy()