ホームページ  >  記事  >  バックエンド開発  >  連鎖代入を誤って使用すると、Pandas で予期しない結果が生じる可能性がありますか?

連鎖代入を誤って使用すると、Pandas で予期しない結果が生じる可能性がありますか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-24 06:15:30463ブラウズ

How Can Incorrect Use of Chained Assignments Lead to Unexpected Results in Pandas?

Pandas での連鎖割り当て

Pandas でデータフレームを操作する場合、連鎖割り当ては予期しない動作や誤検知を引き起こす可能性があります。コピー警告付きの設定。この警告は、連鎖割り当てに関する潜在的な落とし穴をユーザーに警告することを目的としています。

連鎖割り当ての仕組み

Pandas では、ほとんどのメソッド呼び出しはオブジェクトのコピーを返します。つまり、df['column'] = df['column'].fillna(...) などの連鎖代入を実行すると、元のデータフレーム自体ではなく、元のデータフレームのコピーが変更される可能性があります。

.ix()、.iloc()、および .loc() によるチェーンの影響

ix()、iloc()、および loc の選択() は連鎖代入の動作に影響を与える可能性があります。

  • ix() は非推奨なので使用しないでください。
  • iloc() は整数インデックスを使用してデータを取得します。このメソッドは要素に直接アクセスすることしかできず、連鎖割り当てはサポートしません。
  • loc() はラベルを使用してデータを取得します。 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。