اذهب إلى المحتوى

السؤال

نشر

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

re.search(pattern, cell_in_question) 

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

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

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

Recommended Posts

  • 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

  • 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
"""

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...