الباندا: ابحث عن سلسلة في جميع أعمدة 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 بشروط متعددة

Add a Comment

ایمئیل یایینلانمایاجاق ایسته‎نیله‎ن بوشلوقلار خاللانمیشدیر *