Pandas での連鎖割り当て
Pandas でデータフレームを操作する場合、連鎖割り当ては予期しない動作や誤検知を引き起こす可能性があります。コピー警告付きの設定。この警告は、連鎖割り当てに関する潜在的な落とし穴をユーザーに警告することを目的としています。
連鎖割り当ての仕組み
Pandas では、ほとんどのメソッド呼び出しはオブジェクトのコピーを返します。つまり、df['column'] = df['column'].fillna(...) などの連鎖代入を実行すると、元のデータフレーム自体ではなく、元のデータフレームのコピーが変更される可能性があります。
.ix()、.iloc()、および .loc() によるチェーンの影響
ix()、iloc()、および loc の選択() は連鎖代入の動作に影響を与える可能性があります。
最適なコーディング方法
潜在的な問題を回避するには連鎖代入を行う場合は、操作の結果を新しい変数に明示的に代入することをお勧めします。たとえば、
<code class="python">df['amount'] = df['amount'].fillna(...)</code>
の代わりに、
<code class="python">df['amount_updated'] = df['amount'].fillna(...)</code>
False Positives
一部の連鎖割り当てでは、警告がトリガーされる場合があります。元のデータフレームは変更しないでください。このような場合は、次を使用して警告をオフにすることができます:
<code class="python">pd.set_option('chained_assignment', None)</code>
例
次のコードを検討してください:
<code class="python">data['amount'] = data.apply(lambda row: function1(row, date, qty), axis=1) data['amount'] = data['amount'].astype(float)</code>
このコードdata['amount'] が 2 回割り当てられているため、SettingWithCopyWarning が発生する可能性があります。これを修正するには、最初の操作の結果を新しい変数に代入します:
<code class="python">temp_amount = data.apply(lambda row: function1(row, date, qty), axis=1) data['amount'] = temp_amount.astype(float)</code>
以上が連鎖代入を誤って使用すると、Pandas で予期しない結果が生じる可能性がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。