Pandas: ค้นหาสตริงในคอลัมน์ทั้งหมดของ dataframe


คุณสามารถใช้ไวยากรณ์ต่อไปนี้เพื่อค้นหาสตริงเฉพาะในแต่ละคอลัมน์ของ Pandas DataFrame และกรองแถวที่มีสตริงในคอลัมน์อย่างน้อยหนึ่งคอลัมน์:

 #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

สมมติว่าเรามี DataFrame แพนด้าต่อไปนี้ซึ่งมีข้อมูลเกี่ยวกับบทบาทแรกและบทบาทที่สองของนักบาสเกตบอลหลายคนในทีม:

 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

รหัสต่อไปนี้แสดงวิธีการกรอง DataFrame ของ pandas สำหรับแถวที่สตริง “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 ผลลัพธ์จะมีสตริง “Guard” ในคอลัมน์อย่างน้อยหนึ่งคอลัมน์

คุณยังสามารถกรองแถวที่มีหนึ่งในหลายสตริงปรากฏในคอลัมน์อย่างน้อยหนึ่งคอลัมน์ได้โดยใช้ตัวดำเนินการ “OR” ( | ) ในหมีแพนด้า

ตัวอย่างเช่น รหัสต่อไปนี้แสดงวิธีการกรองแถวที่ “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 ผลลัพธ์จะมี “P Guard” หรือ “Center” ในคอลัมน์อย่างน้อยหนึ่งคอลัมน์

หมายเหตุ : สิ่งสำคัญคือต้องรวมอาร์กิวเมนต์ na=False ไว้ในฟังก์ชัน contains() มิฉะนั้นคุณจะพบ ข้อผิดพลาด หากค่า NaN มีอยู่ใน DataFrame

แหล่งข้อมูลเพิ่มเติม

บทช่วยสอนต่อไปนี้จะอธิบายวิธีดำเนินการกรองทั่วไปอื่น ๆ ในแพนด้า:

วิธีกรอง Pandas DataFrame ตามค่าคอลัมน์
วิธีกรองแถว Pandas DataFrame ตามวันที่
วิธีกรอง Pandas DataFrame ในหลายเงื่อนไข

เพิ่มความคิดเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *