Pandas: cari string di semua kolom dataframe
Anda dapat menggunakan sintaks berikut untuk mencari string tertentu di setiap kolom pandas DataFrame dan memfilter baris yang berisi string di setidaknya satu kolom:
#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 )]
Contoh berikut menunjukkan cara menggunakan sintaksis ini dalam praktiknya.
Contoh: mencari string di semua kolom Pandas DataFrame
Misalkan kita memiliki pandas DataFrame berikut yang berisi informasi tentang peran pertama dan peran kedua dari berbagai pemain bola basket dalam sebuah tim:
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
Kode berikut menunjukkan cara memfilter pandas DataFrame untuk baris di mana string “Penjaga” muncul di kolom mana pun:
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
Perhatikan bahwa setiap baris DataFrame yang dihasilkan berisi string “Penjaga” di setidaknya satu kolom.
Anda juga dapat memfilter baris yang salah satu dari beberapa stringnya muncul di setidaknya satu kolom dengan menggunakan operator “ATAU” ( | ) di panda.
Misalnya, kode berikut memperlihatkan cara memfilter baris di mana “P Guard” atau “Center” muncul di setidaknya satu kolom:
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
Perhatikan bahwa setiap baris dalam DataFrame yang dihasilkan berisi “P Guard” atau “Center” di setidaknya satu kolom.
Catatan : Penting untuk menyertakan argumen na=False dalam fungsi mengandung() jika tidak, Anda akan mengalami kesalahan jika nilai NaN ada di DataFrame.
Sumber daya tambahan
Tutorial berikut menjelaskan cara melakukan operasi pemfilteran umum lainnya di panda:
Cara memfilter Pandas DataFrame berdasarkan nilai kolom
Cara memfilter baris Pandas DataFrame berdasarkan tanggal
Cara memfilter Pandas DataFrame pada berbagai kondisi