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

السؤال

نشر

السلام عليكم

طيب اي الداله دي select_dtypes وكمان دي apply() الموجود في pandas  وهلي هم افضل من الif و for loop ؟

يعني ده افضل 

for columns in data_train.columns:
    if data_train[columns].dtypes == object:
        data_train[columns] = label_encoer.fit_transform(data_train[columns])

والا ده

data_train[data_train.select_dtypes(include=['object']).columns] = data_train.select_dtypes(include=['object']).apply(label_encoer.fit_transform)

 

Recommended Posts

  • 0
نشر

وعليكم السلام ورحمة الله وبركاته.

لنشرح أولا الدالتين :

  • select_dtypes():
    • نستخدم تلك الدالة لإختيار الأعمدة بناء على نوع البيانات سواء كانت object أو float أو int أو غيرها.
    • المثال التالي سيقوم بتحديد الأعمدة التي من نوع object فقط:
      data_train.select_dtypes(include=['object'])
  • apply():
    • نستخدمها لتطبيق دالة معينة على كل عمود أو صف في DataFrame .
    • المثال التالي سيطبق fit_transform من label_encoder على كل عمود :
      data_train.apply(label_encoder.fit_transform)

 

الآن لنفرق بين الكودين الذي أرفقتهم :

الطريقة الأولى وهي استخدام for loop مع if :

  • مميزاتها:
    • الكود واضح ومن ينظر إليها يفهم سريعا ما هو المطلوب تنفيذه من هذا الكود.
    • يمكنك إضافة أي شروط أو عمليات إضافية داخل الـ for loop بسهولة.
  • عيوبها:
    • استخدام for loop  يعتبر أبطأ بالنسبة إلى الدوال المدمجة مثل apply() أو select_dtypes حيث تلك الدوال تم إنشاءها لتكون أسرع وأفضل من الأكواد المجردة .

الطريقة الثانية وهي استخدام select_dtypes و apply :

  • مميزاتها:
    • كما وضحت لك أن الدوال select_dtypes  و apply تم إنشاءها لتكوم أفضل وأسرع وهكذا نستطيع التعامل مع البيانات بشكل أسرع من الـ for loop.
    • الكود أقصر من الكود الأول.
  • عيوبها:
    • تلك الطريقة ليست سهلة في القراءة وليست أوضح كما في الطريقة الأولى .
    • إذا كنت بحاجة إلى إضافة شروط كثيرة فهذه الطريقة ليست الأفضل في ذلك.

لهذا إذا كنت تبحث عن الأداء الأسرع والأفضل فالطريقة الثانية أفضل بكثير .

  • 0
نشر

في pandas، توجد دوال مُخصصة لتسهيل معالجة البيانات بشكل فعال، ومنها select_dtypes وapply().

حيث select_dtypes تسمح لك بفلترة (تصفية) أعمدة الـ DataFrame حسب نوع البيانات dtypes، بالشكل التالي:

df.select_dtypes(include=[int, float], exclude=[object])

include اختيار الأعمدة ذات الأنواع المحددة (مثل int، float، datetime) و exclude استبعاد الأعمدة ذات الأنواع المحددة.

import pandas as pd
data = {'A': [1, 2], 'B': ['x', 'y'], 'C': [3.0, 4.0]}
df = pd.DataFrame(data)

numeric_df = df.select_dtypes(include='number')

أما apply() تطبق دالة مُخصصة على جميع الصفوف أو الأعمدة (حسب المحور axis).

df.apply(func, axis=0) 
df.apply(func, axis=1)  

كالتالي:

df['sum'] = df.apply(lambda row: row.sum(), axis=1)

ودوال pandas مثل select_dtypes وapply() تكون أسرع بشكل عام لأنها مبنية على تحسينات مُستوى منخفض مثل C أو NumPy.

أما الحلقات التقليدية (for/if) في Python تكون أبطأ، خاصة مع البيانات الكبيرة، لأنها تُنفذ بشكل تسلسلي ولا تستفيد من تحسينات المتجهات vectorization.

  • 0
نشر
بتاريخ 6 ساعة قال Mustafa Suleiman:

في pandas، توجد دوال مُخصصة لتسهيل معالجة البيانات بشكل فعال، ومنها select_dtypes وapply().

حيث select_dtypes تسمح لك بفلترة (تصفية) أعمدة الـ DataFrame حسب نوع البيانات dtypes، بالشكل التالي:

df.select_dtypes(include=[int, float], exclude=[object])

include اختيار الأعمدة ذات الأنواع المحددة (مثل int، float، datetime) و exclude استبعاد الأعمدة ذات الأنواع المحددة.

import pandas as pd
data = {'A': [1, 2], 'B': ['x', 'y'], 'C': [3.0, 4.0]}
df = pd.DataFrame(data)

numeric_df = df.select_dtypes(include='number')

أما apply() تطبق دالة مُخصصة على جميع الصفوف أو الأعمدة (حسب المحور axis).

df.apply(func, axis=0) 
df.apply(func, axis=1)  

كالتالي:

df['sum'] = df.apply(lambda row: row.sum(), axis=1)

ودوال pandas مثل select_dtypes وapply() تكون أسرع بشكل عام لأنها مبنية على تحسينات مُستوى منخفض مثل C أو NumPy.

أما الحلقات التقليدية (for/if) في Python تكون أبطأ، خاصة مع البيانات الكبيرة، لأنها تُنفذ بشكل تسلسلي ولا تستفيد من تحسينات المتجهات vectorization.

الف شكرااا جدا لحضرتك

جزاك الله كل خير

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...