البرمجة

تحديث وتصحيح استخدام دالة concat() في pandas

عند مواجهة خطأ من نوع “TypeError: الوسيطة الأولى يجب أن تكون تسلسلية من أشياء باشئة لـ pandas، قد قمت بتمرير كائن من نوع “DataFrame”،” يعني ذلك أن هناك خطأ في كيفية تمريرك للبيانات إلى دالة concat() في pandas. هذا الخطأ يحدث عندما يتوقع concat() أن يتم تمرير مجموعة من DataFrames كمدخل، ولكن تم تمرير DataFrame واحد فقط.

في الشفرة التي قدمتها، يبدو أنك تقوم بقراءة ملف CSV بمقطع (chunk) من البيانات باستخدام pd.read_csv() مع استخدام chunksize، ثم تقوم بتطبيق تحويل على كل مقطع من البيانات، وأخيراً تقوم بدمج كل المقاطع في DataFrame واحد باستخدام pd.concat(). ومع ذلك، هناك خطأ في استخدامك لدالة concat().

لحل هذه المشكلة، يجب أن تمرر قائمة (أو أي مجموعة متسلسلة) من DataFrames إلى دالة concat() بدلاً من DataFrame واحد. يمكنك تحقيق ذلك عن طريق تخزين كل مقطع من البيانات في قائمة، ثم تمرير هذه القائمة إلى concat().

فيما يلي كيفية تصحيح الشفرة:

python
import pandas as pd # قائمة لتخزين كل مقطع من البيانات dfs = [] # اسماء الأعمدة names2 = [...] # قم بتعبئة اسماء الأعمدة هنا # قراءة ملف CSV بمقاطع من البيانات df2 = pd.read_csv('et_users.csv', header=None, names=names2, chunksize=100000) # تحويل كل مقطع من البيانات وإضافته إلى القائمة for chunk in df2: chunk['ID'] = chunk.ID.map(rep.set_index('member_id')['panel_mm_id']) dfs.append(chunk) # دمج كل المقاطع في DataFrame واحد result_df = pd.concat(dfs, ignore_index=True)

بهذه الطريقة، يتم تخزين كل مقطع من البيانات في قائمة “dfs”، ثم يتم دمج كل المقاطع في DataFrame واحد باستخدام دالة concat() بشكل صحيح.

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

بالتأكيد، دعنا نستكمل المقال.

تمامًا كما قمت بتصحيح الشفرة لتجنب الخطأ TypeError الذي واجهته، هناك بعض النقاط الإضافية التي يمكن أن نناقشها لفهم السياق بشكل أفضل وتحسين عملية البرمجة.

أولاً، يبدو أنك تقوم بتعيين العمود ‘ID’ في كل مقطع من البيانات باستخدام خريطة (map) على أساس مفتاح/قيمة من DataFrame آخر يسمى ‘rep’. هذا النهج يُعتبر فعّالًا إذا كان لديك DataFrame ‘rep’ صغير الحجم، حيث يمكنك تخزينه بأكمله في الذاكرة. ومع ذلك، إذا كان DataFrame ‘rep’ كبير الحجم، قد تواجه بعض التحديات في أدائها، خاصة إذا كنت تقوم بتنفيذ هذا التحويل على كل مقطع من البيانات.

ثانيًا، استخدامك لمعلمة ‘ignore_index=True’ في دالة concat() يعني أنك ترغب في إعادة ترقيم الفهارس (index) بعد دمج البيانات. هذا يكون مفيدًا إذا كنت ترغب في إعادة ترقيم الفهارس بشكل متسلسل بدلاً من الحفاظ على الفهارس الأصلية لكل مقطع. ومع ذلك، يجب أن تكون على دراية بأن هذا الإعداد قد يؤثر على الأداء، خاصة عند دمج مجموعة كبيرة من المقاطع، حيث يحتاج pandas إلى إعادة ترقيم كل فهرس بعد الدمج.

وأخيرًا، يُشير استخدامك لمعلمة ‘header=None’ في pd.read_csv() إلى أن الملف CSV الخاص بك لا يحتوي على صفوف للعناوين. إذا كانت البيانات الأولية تحتوي بالفعل على صفوف عناوين، يمكنك تغيير هذا الإعداد إلى ‘header=0’ لتحديد أن الصف الأول في الملف هو صف العناوين.

باختصار، تصحيح الخطأ وتحسين الكود ليس فقط يعالج المشكلة الحالية، ولكنه يُعزز أيضًا فهمك لعمليات معالجة البيانات ويساعد في تحسين أداء التطبيقات الخاصة بك.

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

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

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر