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

Tambahkan komentar

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *