• 0

اختيار الأسطر التي تحوي على كلمة معينة في باندا pandas

لدي dataframe بها 4 أعمدة، إثنان منهم عبارة عن كلمات string، كنت أتساءل عما إذا كانت هناك طريقة لتحديد الصفوف بناءً على قيمة معينة موجودة في عمود ما، بمعني أصح ، أريد دالة في Pandas تقوم بأداء مماثل تلك الدالة:

re.search(pattern, cell_in_question) 

حاولت بالفعل تجربة هذا الكود لكن لا أظنه صحيحا:

df[df['A'] == "hello world"]

ما الحل في هذا؟

3 اشخاص أعجبوا بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0

عندما قمت بإختبار حلك الذي قدمته:

df[df['A'] == "hello world"]

أظهر لي هذا الخطأ:

ValueError: cannot mask with array containing NA / NaN values

إذاً فالحل في حد ذاته ليس خطأً لكن عليك أن تعتبر وجود القيم nan، لذا يمكننا عمل تعديل بسيط ليصبح الكود سليماً كالتالي:

df[df["A"].str.contains("Hello World", na=False)]

هناك أيضا حل أخر باستخدم str.contains والتي تقوم بالبحث عن كلمة أو جملة معينة داخل dataframe، الكود التالي يؤدي المهمة التي تطلبها كذلك:

df[df['A'].str.contains("hello world")]

 

تمّ تعديل بواسطة Ahmed Sharshar

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0

تستطيع استخدام filter لتحديد الأعمدة التي تحتوي على كلمة hello كالتالي

df.filter(like='hello')

ولتحديد الصفوف عن طريق المطابقة الجزئية للسلسلة تحتاج لتمرير المتغير axis واسناد القيمة صفر اليه كالتالي

df.filter(like='hello', axis=0)

سوف يتم تحديد الصفوف التي تحتوي على كلمة hello

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0

كونك لم ترفق لنا شكل بياناتك سأتعامل مع مشكلتك بحالة عامة، وسأقدم المثال التالي، مع أول طريقة وهي استخدام itertuples، ومن خلال الكود التالي ستحصل أيضاً على موقع الأسطر أيضاً

import pandas as pd
df = pd.DataFrame({'country': ['US blabla', 'US adfv fda', 'Germany adce', 'China']})
print("Given Dataframe is :\n",df)
"""
Given Dataframe is :
         country
0     US blabla
1   US adfv fda
2  Germany adce
3         China
"""
for x in df.itertuples():
    if x[1].find('US') != -1:
        print(x)
"""
Pandas(Index=0, country='US blabla')
Pandas(Index=1, country='US adfv fda')
"""

حيث أن itertuples يقوم بإنشاء مكرر على الداتا فرام ثم نقوم بالمرور على الأسطر في الداتا من خلاله واستخراج المطلوب بالاعتماد على الدالة find،  كما يمكنك استخدام الدالة iterrows أيضاً:

for index, row in df.iterrows():
    if 'US' in row['country']:
        print(index, row['country'])
"""
0 US blabla
1 US adfv fda
"""

كما يمكننا استخدام الدالة Search من مكتبة ال regular expressions كالتالي:

# regular expressions
from re import search
for ind in df.index:
    if search('US', df['country'][ind]):
        print(ind,df['country'][ind])
"""
0 US blabla
1 US adfv fda
"""

كما يمكننا تطبيق الطريقة التي قدمها أحمد على الفريم السابق:

df[df['country'].str.contains('US', regex=False, case=False, na=False)]
"""
country
0 	US blabla
1 	US adfv fda
"""

أو بالشكل التالي:

df[df.country.str.contains('[US]')]
"""
country
0 	US blabla
1 	US adfv fda
"""

 

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن