[解決済み] pandas: データフレームのインデックス作成時の複数条件 - 予期せぬ動作
2022-03-04 20:41:37
質問
データフレーム内の行を2つの列の値でフィルタリングしています。
なぜか OR 演算子が AND 演算子と同じような動作をし、その逆もまた然りです。
私のテストコードです。
import pandas as pd
df = pd.DataFrame({'a': range(5), 'b': range(5) })
# let's insert some -1 values
df['a'][1] = -1
df['b'][1] = -1
df['a'][3] = -1
df['b'][4] = -1
df1 = df[(df.a != -1) & (df.b != -1)]
df2 = df[(df.a != -1) | (df.b != -1)]
print pd.concat([df, df1, df2], axis=1,
keys = [ 'original df', 'using AND (&)', 'using OR (|)',])
そして、その結果。
original df using AND (&) using OR (|)
a b a b a b
0 0 0 0 0 0 0
1 -1 -1 NaN NaN NaN NaN
2 2 2 2 2 2 2
3 -1 3 NaN NaN -1 3
4 4 -1 NaN NaN 4 -1
[5 rows x 6 columns]
ご覧の通り
AND
演算子は、少なくとも1つの値が
-1
. 一方
OR
演算子は、両方の値が等しいことを要求します。
-1
を削除します。私は全く逆の結果を期待します。どなたかこの挙動を説明していただけませんか?
pandas 0.13.1を使っています。
どのように解決するのですか?
<ブロッククオートご覧の通り、AND演算子は、少なくとも1つの行を削除します。 の値は-1です。一方、OR演算子では両方の値が の値が-1でないと落とせません。
そうなんだ。 をどうしたいかという観点で条件を書いていることを忘れないでください。
保つ
何を捨てるかではなく、何を捨てたいかという観点で。 例えば
df1
:
df1 = df[(df.a != -1) & (df.b != -1)]
あなたが言っているのは、"keep the rows in which
df.a
が-1でなく、かつ
df.b
isn't -1"、これは少なくとも1つの値が-1であるすべての行を削除するのと同じです。
について
df2
:
df2 = df[(df.a != -1) | (df.b != -1)]
あなたが言っているのは、以下のどちらかの行を保持するということです。
df.a
または
df.b
が-1でない場合、両方の値が-1である行を削除するのと同じです。
追記:以下のような連鎖したアクセス
df['a'][1] = -1
はトラブルに巻き込まれる可能性があります。 を使う習慣をつけるとよいでしょう。
.loc
と
.iloc
.
関連
-
PicgoのイメージベッドツールをPythonで実装する
-
pythonサイクルタスクスケジューリングツール スケジュール詳解
-
pyCaret効率化乗算器 オープンソース ローコード Python機械学習ツール
-
[解決済み】TypeError: re.findall()でバイトのようなオブジェクトに文字列パターンを使用することはできません。)
-
[解決済み] builtins.TypeError: strでなければならない、bytesではない
-
[解決済み】ValueError: pickleプロトコルがサポートされていません。3、python2 pickleはpython3 pickleでダンプしたファイルを読み込むことができない?
-
[解決済み] pandas apply()から複数カラムを返す
-
[解決済み] Pandasのデータフレームで複数の列を選択する
-
[解決済み] pandasを使った "大量データ "ワークフロー【終了しました
-
[解決済み] 空のPandas DataFrameを作成し、それを埋める?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Pythonコンテナのための組み込み汎用関数操作
-
Python Decorator 練習問題
-
PythonでECDSAを実装する方法 知っていますか?
-
[解決済み】お使いのCPUは、このTensorFlowバイナリが使用するようにコンパイルされていない命令をサポートしています。AVX AVX2
-
[解決済み] [Solved] sklearn error ValueError: 入力に NaN、infinity または dtype('float64') に対して大きすぎる値が含まれている。
-
[解決済み】終了コード -1073741515 (0xC0000135)でプロセス終了)
-
[解決済み】TypeErrorを取得しました。エントリを持つ子テーブルの後に親テーブルを追加しようとすると、 __init__() missing 1 required positional argument: 'on_delete'
-
[解決済み】Pythonでgoogle APIのJSONコードを読み込むとエラーになる件
-
[解決済み】Python: OverflowError: 数学の範囲エラー
-
[解決済み】 TypeError: += でサポートされていないオペランド型: 'int' および 'list' です。