ホームページ >バックエンド開発 >Python チュートリアル >パンダのSettingWithCopyWarningを効果的に処理するにはどうすればよいですか?

パンダのSettingWithCopyWarningを効果的に処理するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-25 15:02:12144ブラウズ

How Can I Effectively Handle Pandas' SettingWithCopyWarning?

Pandas での SettingWithCopyWarning の処理

Pandas を 0.11 から 0.13.0rc1 にアップグレードする際、ユーザーは多数の SettingWithCopyWarning メッセージに遭遇する可能性があります。そのような例の 1 つは次のとおりです。

E:\FinReporter\FM_EXT.py:449: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_index,col_indexer] = value instead
quote_df['TVol']   = quote_df['TVol']/TVOL_SCALE

警告について理解する

SettingWithCopyWarning フラグは、次のような「連鎖」割り当てを混乱させる可能性があります。

df[df['A'] > 2]['B'] = new_val  # new_val not set in df

これは常に機能するとは限りません。特に最初の選択がコピーを返す場合には期待されます。この問題を解決するには、次の手順を使用します。

df.loc[df['A'] > 2, 'B'] = new_val

提供されたコード内の警告に対処する

提供されたコード スニペット内:

quote_df['TVol']   = quote_df['TVol']/TVOL_SCALE

を実行すると、連鎖代入は以下と同等です:

quote_df = quote_df[quote_df['A'] > 2]
quote_df['TVol'] = new_val

このパターンは否定的な例と区別できず、

警告の無効化

書き込みが元のフレームに影響を与えないと確信できる場合は、次のコマンドで警告を無効にします。

import pandas as pd
pd.options.mode.chained_assignment = None  # default='warn'

追加情報

さらに理解するには、次のリソースを参照してください:

  • Pandas ユーザーガイド: データのインデックス付けと選択
  • Python データ サイエンス ハンドブック: データのインデックス付けと選択
  • 実際の Python: Pandas での SetWithCopyWarning
  • Dataquest: SettingwithCopyWarning: Pandas でこの警告を修正する方法
  • データサイエンスに向けて:SettingWithCopyWarning の説明パンダ

以上がパンダのSettingWithCopyWarningを効果的に処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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