ホームページ >バックエンド開発 >Python チュートリアル >条件に基づいて DataFrame 値を置換することが直接機能しないのはなぜですか?それを修正するにはどうすればよいですか?

条件に基づいて DataFrame 値を置換することが直接機能しないのはなぜですか?それを修正するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-21 00:25:10228ブラウズ

Why Doesn't Replacing DataFrame Values Based on a Condition Work Directly, and How Can I Fix It?

条件付きロジックを使用した DataFrame 値の置換

Pandas では、DataFrame の操作は重要な側面です。一般的な操作の 1 つは、特定の条件に基づいて値を置換することです。次のシナリオを考えてみましょう:

質問:

しきい値を超える DataFrame 列の値をゼロに置き換えたいと考えています。

df[df.my_channel > 20000].my_channel = 0

を使用してこれを達成しようとしましたが、チャネルを新しいDataFrameにコピーする場合にのみ機能するようです。元の DataFrame ではなぜ機能しないのですか?

回答:

問題は、使用されているインデクサーに関連しています。 Pandas バージョン 0.20.0 より前は、.ix インデクサーが一般的に使用されていました。ただし、それ以降は非推奨になりました。代わりに、.loc または .iloc インデクサーを使用してください。

問題を解決するには、次のコードを利用できます:

mask = df.my_channel > 20000
column_name = 'my_channel'
df.loc[mask, column_name] = 0

このコードは次のアクションを実行します:

  1. マスクは df.my_channel > の行を選択します。 20000 は True です。
  2. df.loc[mask, column_name] = 0 は、column_name 列で選択された行を 0 に設定します。

または、ワンライナーを使用することもできます。

df.loc[df.my_channel > 20000, 'my_channel'] = 0

この場合、.iloc ではなく .loc を使用することをお勧めします。後者の場合、NotImplementedError が発生する可能性があります。

以上が条件に基づいて DataFrame 値を置換することが直接機能しないのはなぜですか?それを修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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