Mohamed Elnemr نشر 21 أغسطس 2021 أرسل تقرير نشر 21 أغسطس 2021 لدي بيانات على شكل dataframe ، وأود أن أقوم بعمل دالة بحيث يتم تطبيقها على تلك البيانات كلها. على سبيل المثال عمل دالة لتحديد اذا كانت القيمة مرتفعة أو متوسطة أو منخفضة بناء على قيمة العنصر العددية، كيف يمكن عمل هذا؟ 1 اقتباس
0 Ahmed Sharshar نشر 21 أغسطس 2021 أرسل تقرير نشر 21 أغسطس 2021 يمكنك عمل دالة بحيث يتم تطبيقها على كل البيانات باستخدام: s.apply(func, convert_dtype=True, args=()) حيث تقوم بأخذ الدالة وتطبيقها على كل البيانات. فمثلا لحل المشكلة التي عرضتها يمكنك الإطلاع على الكود التالي: import pandas as pd # قراءه البيانات s = pd.read_csv("stock.csv", squeeze = True) # تعريف الدالة التي تقوم بتصنيف العناصر def fun(num): if num<200: return "Low" elif num>= 200 and num<400: return "Normal" else: return "High" # تطبيق الدالة على البيانات new = s.apply(fun) # طباعة أول 3 قيم print(new.head(3)) # طباعة قيم 3 عناصر عشوائية في المنتصف print(new[1400], new[1500], new[1600]) # طباعة أخر 3 عناصر print(new.tail(3)) لاحظ أن "stock.csv" هو مجرد ملف بيانات يمكنك أستبداله بأي ملف تريد. عندما قمت بتشغيل الكود كانت هذه هي النتائج: 1 اقتباس
0 Ali Haidar Ahmad نشر 22 أغسطس 2021 أرسل تقرير نشر 22 أغسطس 2021 يمكنك استخداك الدالة apply كما أشار أحمد وبطرق عديدة، أولاً في حالة كان التابع الخاص بك يمرر له أكثر من قيمة أو كنت تحتاج لتطبيق تابع يستخدم قيم الأعمدة الأخرى لإنشاء عمود جديد، فيمكنك استخدام lambda مع Apply كالتالي: # Import pandas package import pandas as pd # تعريف تابع # هذا التابع نمرر له عددين ويقوم بجمعهما def add(v1, v2): return v1 + v2 # تعريف داتافريم data = { 'c1':[1, 2, 3], 'c2':[4, 5, 6] } df = pd.DataFrame(data) # طباعته print("Original DataFrame:\n", df) # تطبيق التابع السابق على كل سطر من أسطر الداتا، بحيث يقوم بجمع كل قيمتين متقابلتين من أعمدة الداتا ويخزنهما في عمود جديد #lambda قمنا باستخدام الدالة df['add'] = df.apply(lambda row : add(row['c1'],row['c2']), axis = 1) print('\nAfter Applying Function: ') # النتيجة print(df) """ Original DataFrame: c1 c2 0 1 4 1 2 5 2 3 6 After Applying Function: c1 c2 add 0 1 4 5 1 2 5 7 2 3 6 9 """ #sumكما أنه كان بإمكانك استخدام الدالة df['add'] = df.apply(np.sum, axis = 1) كما يمكنك استخدام الدالة np.vectorize وهي سريعة جداً وأسرع بكثير من الدالة السابقة ويمكنك استخدامها بالشكل الذي تريده بدون الحاجة ل lambda: # Import pandas package import pandas as pd import numpy as np # تعريف تابع def add(v1,v2): return v1 + v2 # تعريف داتافريم data = { 'c1':[1, 2, 3], 'c2':[4, 5, 6] } df = pd.DataFrame(data) print("Original DataFrame:\n", df) df['add'] = np.vectorize(add)(df['c1'], df['c2']) print('\nAfter Applying Function: ') print(df) """ Original DataFrame: c1 c2 0 1 4 1 2 5 2 3 6 After Applying Function: c1 c2 add 0 1 4 5 1 2 5 7 2 3 6 9 """ 1 اقتباس
السؤال
Mohamed Elnemr
لدي بيانات على شكل dataframe ، وأود أن أقوم بعمل دالة بحيث يتم تطبيقها على تلك البيانات كلها.
على سبيل المثال عمل دالة لتحديد اذا كانت القيمة مرتفعة أو متوسطة أو منخفضة بناء على قيمة العنصر العددية، كيف يمكن عمل هذا؟
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.