[解決済み] 列の値に基づいてDataFrameから行を選択するにはどうすればよいですか?
2022-03-14 03:49:17
質問
の行を選択するにはどうすればよいですか?
DataFrame
Pandasのいくつかのカラムの値に基づいて?
SQLで言えば
SELECT *
FROM table
WHERE column_name = some_value
Pandasのドキュメントを見てみましたが、すぐには答えが見つかりませんでした。
どのように解決するのですか?
列の値がスカラーに等しい行を選択する。
some_value
を使用します。
==
:
df.loc[df['column_name'] == some_value]
列の値が反復記号に含まれる行を選択する。
some_values
を使用します。
isin
:
df.loc[df['column_name'].isin(some_values)]
複数の条件を組み合わせる
&
:
df.loc[(df['column_name'] >= A) & (df['column_name'] <= B)]
括弧に注意してください。Pythonの
演算子の優先順位の規則
,
&
よりも強く結合されます。
<=
と
>=
. したがって、最後の例の括弧は必要である。括弧がない場合
df['column_name'] >= A & df['column_name'] <= B
は次のようにパースされます。
df['column_name'] >= (A & df['column_name']) <= B
となり、その結果 シリーズの真偽が不明確なエラー .
列の値が
と等しくない
some_value
を使用します。
!=
:
df.loc[df['column_name'] != some_value]
isin
はブール値を返すので、値が
ない
で
some_values
を使用して、ブール型シリーズを否定します。
~
:
df.loc[~df['column_name'].isin(some_values)]
例えば
import pandas as pd
import numpy as np
df = pd.DataFrame({'A': 'foo bar foo bar foo bar foo foo'.split(),
'B': 'one one two three two two one three'.split(),
'C': np.arange(8), 'D': np.arange(8) * 2})
print(df)
# A B C D
# 0 foo one 0 0
# 1 bar one 1 2
# 2 foo two 2 4
# 3 bar three 3 6
# 4 foo two 4 8
# 5 bar two 5 10
# 6 foo one 6 12
# 7 foo three 7 14
print(df.loc[df['A'] == 'foo'])
イールド
A B C D
0 foo one 0 0
2 foo two 2 4
4 foo two 4 8
6 foo one 6 12
7 foo three 7 14
複数の値がある場合、それらをまとめて
リスト(より一般的には反復可能なもの)を作成し
isin
:
print(df.loc[df['B'].isin(['one','three'])])
イールド
A B C D
0 foo one 0 0
1 bar one 1 2
3 bar three 3 6
6 foo one 6 12
7 foo three 7 14
ただし、この操作を何度も行う場合は、以下のようにすると効率的です。
最初にインデックスを作成し、その後
df.loc
:
df = df.set_index(['B'])
print(df.loc['one'])
イールド
A C D
B
one foo 0 0
one bar 1 2
one foo 6 12
または、インデックスから複数の値を取り込むには
df.index.isin
:
df.loc[df.index.isin(['one','two'])]
イールド
A C D
B
one foo 0 0
one bar 1 2
two foo 2 4
two foo 4 8
two bar 5 10
one foo 6 12
関連
-
[解決済み】 NameError: グローバル名 'xrange' は Python 3 で定義されていません。
-
[解決済み】NameError: 名前 'self' が定義されていません。
-
[解決済み] PandasでDataFrameの行を反復処理する方法
-
[解決済み] Python 3で「1000000000000000 in range(1000000000000001)」はなぜ速いのですか?
-
[解決済み] Pandas DataFrameからカラムを削除する
-
[解決済み] Pandas DataFrameの行数を取得する方法は?
-
[解決済み] pandasを使った "大量データ "ワークフロー【終了しました
-
[解決済み] Pandasのデータフレームから行を選択するために値のリストを使用する
-
[解決済み】Pandas DataFrameのカラムヘッダからリストを取得する。
-
[解決済み】Pandas DataframeのカラムでNaN値をゼロに置き換えるには?
最新
-
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 jiabaライブラリの使用方法について説明
-
Pythonによるjieba分割ライブラリ
-
風力制御におけるKS原理を深く理解するためのpythonアルゴリズム
-
FacebookオープンソースワンストップサービスpythonのタイミングツールKats詳細
-
[解決済み】TypeError: unhashable type: 'numpy.ndarray'.
-
[解決済み] _tkinter.TclError: 表示名がなく、$DISPLAY環境変数もない。
-
[解決済み] データ型が理解できない
-
[解決済み】TypeErrorを取得しました。エントリを持つ子テーブルの後に親テーブルを追加しようとすると、 __init__() missing 1 required positional argument: 'on_delete'
-
[解決済み】 AttributeError("'str' object has no attribute 'read'")
-
[解決済み】LogisticRegression: Pythonでsklearnを使用して、未知のラベルタイプ: '連続'を使用しています。