Mohamed Elnemr نشر 25 أغسطس 2021 أرسل تقرير نشر 25 أغسطس 2021 لدي dataframe بها 4 أعمدة، إثنان منهم عبارة عن كلمات string، كنت أتساءل عما إذا كانت هناك طريقة لتحديد الصفوف بناءً على قيمة معينة موجودة في عمود ما، بمعني أصح ، أريد دالة في Pandas تقوم بأداء مماثل تلك الدالة: re.search(pattern, cell_in_question) حاولت بالفعل تجربة هذا الكود لكن لا أظنه صحيحا: df[df['A'] == "hello world"] ما الحل في هذا؟ 3 اقتباس
0 Ahmed Sharshar نشر 25 أغسطس 2021 أرسل تقرير نشر 25 أغسطس 2021 (معدل) عندما قمت بإختبار حلك الذي قدمته: 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")] تم التعديل في 25 أغسطس 2021 بواسطة Ahmed Sharshar اقتباس
0 محمد أبو عواد نشر 25 أغسطس 2021 أرسل تقرير نشر 25 أغسطس 2021 تستطيع استخدام filter لتحديد الأعمدة التي تحتوي على كلمة hello كالتالي df.filter(like='hello') ولتحديد الصفوف عن طريق المطابقة الجزئية للسلسلة تحتاج لتمرير المتغير axis واسناد القيمة صفر اليه كالتالي df.filter(like='hello', axis=0) سوف يتم تحديد الصفوف التي تحتوي على كلمة hello 1 اقتباس
0 Ali Haidar Ahmad نشر 25 أغسطس 2021 أرسل تقرير نشر 25 أغسطس 2021 كونك لم ترفق لنا شكل بياناتك سأتعامل مع مشكلتك بحالة عامة، وسأقدم المثال التالي، مع أول طريقة وهي استخدام 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 اقتباس
السؤال
Mohamed Elnemr
لدي dataframe بها 4 أعمدة، إثنان منهم عبارة عن كلمات string، كنت أتساءل عما إذا كانت هناك طريقة لتحديد الصفوف بناءً على قيمة معينة موجودة في عمود ما، بمعني أصح ، أريد دالة في Pandas تقوم بأداء مماثل تلك الدالة:
re.search(pattern, cell_in_question)
حاولت بالفعل تجربة هذا الكود لكن لا أظنه صحيحا:
ما الحل في هذا؟
3 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.