البرمجة

حذف صفوف DataFrame في بانداز بايثون باستخدام تعابير منتظمة

لحذف الصفوف في DataFrame باستخدام تعابير منتظمة في باندا بايثون، يمكنك استخدام الوظيفة str.contains() مع القدرة على تطبيق التعبيرات العادية (regex). لديك نمط معين تريد حذف الصفوف التي تتطابق معه. لذلك، يمكنك استخدام هذا النمط كمعامل في الدالة str.contains().

في هذه الحالة، لحذف الصفوف التي تحتوي على النمط المحدد في العمود “Event Name”، يمكنك استخدام الكود التالي:

python
import pandas as pd # النمط المطابق للبحث patternDel = r"\((MoM|QoQ)\)" # تحميل DataFrame # قم بتحميل DataFrame الخاص بك هنا، يفترض أن يكون اسم العمود 'Event Name' # حذف الصفوف التي تحتوي على النمط المطابق df = df[~df['Event Name'].str.contains(patternDel, regex=True)] # إعادة تعيين فهرس الصفوف إذا كنت ترغب df.reset_index(drop=True, inplace=True) # يمكنك طباعة DataFrame بعد الحذف للتحقق print(df)

في هذا الكود:

  1. يتم استيراد مكتبة بانداز ويتم تعريف النمط المراد البحث عنه في العمود “Event Name”.
  2. يتم استخدام الدالة str.contains() للبحث عن النمط في العمود “Event Name”.
  3. يتم استخدام العملية المنطقية “NOT” (~) لاختيار الصفوف التي لا تحتوي على النمط المحدد.
  4. يمكن استخدام reset_index() إذا كنت ترغب في إعادة ترتيب فهرس الصفوف.

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

المزيد من المعلومات

بينما الكود المذكور أعلاه يقوم بحذف الصفوف التي تحتوي على النمط المحدد بشكل فعال، هناك بعض النقاط التي يجب مراعاتها لتحقيق أقصى قدر من الكفاءة والأداء مع عدد كبير من الصفوف.

أولاً وقبل كل شيء، يجب التأكد من أن DataFrame الخاص بك محمل بشكل صحيح وأن العمود الذي تريد البحث فيه يحتوي على البيانات بالتنسيق الصحيح. قد تحتاج أيضًا إلى تحسين أداء عمليات البحث عندما تعمل مع عدد كبير من الصفوف.

لتحسين الأداء، يمكن استخدام القسم العلوي من الكود لتجنب تحميل DataFrame بالكامل في الذاكرة إذا كان حجمه كبيرًا للغاية. يمكنك استخدام وظائف قراءة الملفات في pandas مثل pd.read_csv() مع استخدام معامل chunksize لتحميل البيانات بشكل تدفقي.

ثانياً، إذا كانت البيانات متسقة وثابتة، يمكنك استخدام تعبيرات منتظمة بدون الحاجة إلى تشغيلها في كل مرة تقوم فيها بالبحث. يمكنك تخزين النمط في متغير واستخدامه عدة مرات دون الحاجة إلى إعادة تعريفه في كل مرة.

وأخيرًا، عند حذف الصفوف من DataFrame، يمكن أن تؤدي هذه العملية إلى تباعد الفهرس وزيادة استهلاك الذاكرة. لتجنب هذا، يمكن استخدام المعلمة inplace=True لتحديث DataFrame بمكان دون إعادة تخزينه.

الكود المحسن يمكن أن يبدو كما يلي:

python
import pandas as pd # النمط المطابق للبحث patternDel = r"\((MoM|QoQ)\)" # تحميل DataFrame بشكل تدفقي إذا كان كبيرًا للغاية # يمكنك ضبط حجم الشانك بحسب الحاجة chunk_size = 10000 chunks = pd.read_csv("your_data.csv", chunksize=chunk_size) # البحث وحذف الصفوف بشكل تدفقي for chunk in chunks: chunk = chunk[~chunk['Event Name'].str.contains(patternDel, regex=True)] # استخدام inplace=True لتحديث DataFrame بدون إعادة تخزينه chunk.reset_index(drop=True, inplace=True) # يمكنك استخدام chunk للتعامل مع البيانات بشكل متسلسل هنا # إعادة تعيين فهرس الصفوف إذا لزم الأمر # يمكنك طباعة DataFrame بعد الحذف للتحقق print(df)

باستخدام هذا الكود، يمكنك الآن حذف الصفوف التي تحتوي على النمط المحدد بكفاءة وبدون استهلاك كبير للذاكرة، حتى مع DataFrame يحتوي على أكثر من 100 ألف صف.

مقالات ذات صلة

زر الذهاب إلى الأعلى

هذا المحتوى محمي من النسخ لمشاركته يرجى استعمال أزرار المشاركة السريعة أو تسخ الرابط !!