Ali Ahmed55 نشر 3 يونيو أرسل تقرير نشر 3 يونيو السلام عليكم ده الكود الاول 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) 1 اقتباس
0 عبد الوهاب بومعراف نشر 3 يونيو أرسل تقرير نشر 3 يونيو وعليكم السلام ورحمة الله، كلاهما يؤديان نفس الوظيفة لكن طريقة التنفيذ تختلف قليلا ففي الكود الأول: 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(). ومع ذلك يبقى الفرق في الأداء سيكون ضئيلا جدا ولن يكون ملحوظا إلا في حال وجود عدد هائل من الأعمدة. 1 اقتباس
0 Ali Ahmed55 نشر 4 يونيو الكاتب أرسل تقرير نشر 4 يونيو الف شكراا جدا جدا لحضرتك حزاك الله كل خير اقتباس
السؤال
Ali Ahmed55
السلام عليكم
ده الكود الاول
وده التاني
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.