• 0

كيف يمكن تطبيق دالة على بيانات في شكل dataframe في pandas

لدي بيانات على شكل dataframe ، وأود أن أقوم بعمل دالة بحيث يتم تطبيقها على تلك البيانات كلها.

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

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

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


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

يمكنك استخداك الدالة 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 شخص أعجب بهذا

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


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

يمكنك عمل دالة بحيث يتم تطبيقها على كل البيانات باستخدام:

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" هو مجرد ملف بيانات يمكنك أستبداله بأي ملف تريد.

عندما قمت بتشغيل الكود كانت هذه هي النتائج:

apply_pandas.jpg.50512db7d6f1e39f6e566625cfe014eb.jpg

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

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


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

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

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

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


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

تسجيل الدخول

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


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