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

السؤال

نشر

السلام عليكم

ده الكود الاول

tof_columns = [col for col in df.columns if col.startswith('tof_')]
df[tof_columns] = df[tof_columns].replace(-1.0, np.nan)

وده التاني 

tof_columns = df.filter(like='tof_').columns
df[tof_columns] = df[tof_columns].replace(-1.0, np.nan)

 

Recommended Posts

  • 0
نشر

وعليكم السلام ورحمة الله،

كلاهما يؤديان نفس الوظيفة لكن طريقة التنفيذ تختلف قليلا ففي الكود الأول:

tof_columns = [col for col in df.columns if col.startswith('tof_')]

يتم المرور على كل اسم عمود في df.columns باستخدام list comprehension، ويتم تطبيق دالة startswith('tof_') على كل اسم عمود وهذه الطريقة تعتمد على تنفيذ سلسلة من العمليات داخل مفسر Python نفسه، مما يجعلها أقل كفاءة عند التعامل مع عدد كبير جدا من الأعمدة، لأن كل اسم عمود يتم التحقق منه بطريقة تكرارية يدوية، بينما في الكود الثاني:

tof_columns = df.filter(like='tof_').columns

يتم استخدام دالة filter() المدمجة في pandas، وهي مكتوبة بلغة C أو Cython داخل مكتبة pandas نفسها وهذه الطريقة أسرع وأكثر كفاءة لأنها تعتمد على عمليات منخفضة المستوى (low-level operations) داخل pandas لمعالجة أسماء الأعمدة دفعة واحدة بدون المرور التكراري على كل عمود باستخدام Python.

لذا فمن حيث الكفاءة والسرعة، الكود الثاني غالبا ما يكون أسرع قليلا، خاصة مع عدد كبير من الأعمدة، لأن df.filter() مكتوبة باستخدام Cython أو C داخل مكتبة pandas، مما يجعلها أكثر كفاءة من استخدام startswith().

ومع ذلك يبقى الفرق في الأداء سيكون ضئيلا جدا ولن يكون ملحوظا إلا في حال وجود عدد هائل من الأعمدة.

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...