パンダ: dataframe のすべての列で文字列を検索します。


次の構文を使用して、pandas DataFrame の各列で特定の文字列を検索し、少なくとも 1 つの列にその文字列を含む行をフィルターできます。

 #define filter
mask = np. column_stack ([df[col]. str . contains (r " my_string ", na= False ) for col in df])

#filter for rows where any column contains 'my_string'
df. loc [mask. any (axis= 1 )]

次の例は、この構文を実際に使用する方法を示しています。

例: Pandas DataFrame のすべての列で文字列を検索します。

チーム内のさまざまなバスケットボール選手の最初の役割と 2 番目の役割に関する情報を含む次のパンダ データフレームがあるとします。

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' player ': ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'],
                   ' first_role ': ['P Guard', 'P Guard', 'S Guard', 'S Forward',
                                  'P Forward', 'Center', 'Center', 'Center'],
                   ' second_role ': ['S Guard', 'S Guard', 'Forward', 'S Guard',
                                   'S Guard', 'S Forward', 'P Forward', 'P Forward']})

#view DataFrame
print (df)

  player first_role second_role
0 AP Guard S Guard
1 BP Guard S Guard
2 CS Guard Forward
3DS Forward S Guard
4 EP Forward S Guard
5 F Center S Forward
6 G Center P Forward
7 H Center P Forward

次のコードは、いずれかの列に文字列「Guard」が表示される行のパンダ データフレームをフィルターする方法を示しています。

 import numpy as np

#define filter
mask = np. column_stack ([df[col]. str . contains (r " Guard ", na= False ) for col in df])

#filter for rows where any column contains 'Guard'
df. loc [mask. any (axis= 1 )]

        player first_role second_role
0 A P Guard S Guard
1 B P Guard S Guard
2 C S Guard Forward
3 D S Forward S Guard
4 E P Forward S Guard

結果として得られる DataFrame の各行には、少なくとも 1 つの列に文字列「Guard」が含まれていることに注意してください。

pandas の「OR」演算子 ( | ) を使用して、複数の文字列のうちの 1 つが少なくとも 1 つの列に出現する行をフィルターすることもできます。

たとえば、次のコードは、少なくとも 1 つの列に「P Guard」または「Center」が表示される行をフィルタリングする方法を示しています。

 import numpy as np

#define filter
mask = np. column_stack ([df[col]. str . contains (r " P Guard|Center ", na= False ) for col in df])

#filter for rows where any column contains 'P Guard' or 'Center'
df. loc [mask. any (axis= 1 )]

        player first_role second_role
0 A P Guard S Guard
1 B P Guard S Guard
5 F Center S Forward
6 G Center P Forward
7 H Center P Forward

結果として得られる DataFrame の各行には、少なくとも 1 つの列に「P Guard」または「Center」が含まれていることに注意してください。

: contains()関数にna=False引数を含めることが重要です。そうしないと、NaN 値が DataFrame に存在する場合にエラーが発生します。

追加リソース

次のチュートリアルでは、パンダで他の一般的なフィルタリング操作を実行する方法について説明します。

Pandas DataFrame を列値でフィルタリングする方法
Pandas DataFrame 行を日付でフィルターする方法
複数の条件で Pandas DataFrame をフィルタリングする方法

コメントを追加する

メールアドレスが公開されることはありません。 が付いている欄は必須項目です