الباندا: ابحث عن سلسلة في جميع أعمدة dataframe
يمكنك استخدام بناء الجملة التالي للبحث عن سلسلة معينة في كل عمود من الباندا 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
يوضح الكود التالي كيفية تصفية Pandas DataFrame للصفوف التي تظهر فيها السلسلة “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 في الدالة contain() وإلا فسوف تواجه خطأً في حالة وجود قيم NaN في DataFrame.
مصادر إضافية
تشرح البرامج التعليمية التالية كيفية إجراء عمليات التصفية الشائعة الأخرى في الباندا:
كيفية تصفية Pandas DataFrame حسب قيم الأعمدة
كيفية تصفية صفوف Pandas DataFrame حسب التاريخ
كيفية تصفية Pandas DataFrame بشروط متعددة