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

ظهور الخطأ Error tokenizing data في pandas

Mohamed Elnemr

السؤال

أحاول تشغيل الكود التالي:

path = 'data.csv'

df = pd.read_csv(path)

لكن يظهر لي هذا الخطأ

pandas.parser.CParserError: Error tokenizing data. C error: Expected 2 fields in line 3, saw 12

كيف يمكنني التغلب على هذا الخطأ؟

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

يظهر الخطأ نتيجة عدم معرفة ال parser برأس البيانات header حيث يعتبر أن أول صف هو بداية البيانات رغم أنه ليس كذلك، لذا يمكنك تجربة الكود التالي لتغطي هذا الخطأ والذي يقوم بعدم اعتبار أول صفين ضمن البيانات:

data = pd.read_csv(path, skiprows=2)

أو يمكنك ترك pandas تعالج الخطأ بنفسها عن طريق تجنب الصفوف التى تظهر الخطأ كالتالي:

df = pd.read_csv('data.csv', error_bad_lines=False)
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

قد تكون المشكلة إما بالصف الأول من البيانات كما أشار أحمد، أو بالمحددات delimiters. لذا لحل المشكلة قم باستخدام الوسيط sep و/أو الوسيط header مع الدالة read_csv.
بالنسبة ل sep فالتوثيق يقول"إذا كان sep = None [ أي غير محدد] ، فسيحاول باندا تحديده تلقائياً." أي عدم تحديده لن يسبب مشكلة (ومع ذلك في الممارسة العملية تنتج أخطاء مع البعض لذا يفضل تحديده إذا حدث خطأ). أما بالنسبة لل header تقول المستندات في باندا ""إذا كان الملف لا يحتوي على صف header، فيجب عليك تمرير header = None" بشكل صريح. ,في هذه الحالة، يقوم باندا تلقائياً بإنشاء فهارس لكل حقل {0،1،2، ...}."
مثلاً:

df = pd.read_csv(path, sep='delimiter', header=None)
# sep :delimiter  تقوم من خلالها بتعريف المحدد
# header=None: لإخبار باندا بأن بياناتك لا تحتوي على صف لعناوين الرؤوس / الأعمدة

كما يمكنك استخدام الحلول التي أشار لها أحمد بالنسبة لل header

تم التعديل في بواسطة Ali Haidar Ahmad
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

كما وضح أحمد أنه المشكلة في عدم وجود ال header وكما في التوثيق الخاص بpandas 

اقتباس

إذا كان الملف لا يحتوي على صف ال header، فعليك تمرير header=None

 لذلك لحل المشكلة سوف يكون الكود كالتالي

df = pandas.read_csv(filepath, sep='delimiter', header=None)

أو يمكنك حل هذه المشكلة من خلال تعريف أسماء الأعمدة في الخاصية names كما في المثال التالي

col_names = ["col1", "col2", "col3", ...]
df = pd.read_csv(filename, names=col_names)

وليس شرطاً أن تكون بنفس أسماء الأعمدة بل يجب أن تكون placeholder فقط بعدد الأعمدة لذلك يمكنك استخدام الحل التالي

df = pd.read_csv(filename, names = list(range(0,N)))

حيث يعبر N عن عدد الأعمدة

تم التعديل في بواسطة عبدالباسط ابراهيم
تصحيح بعض المعلومات
رابط هذا التعليق
شارك على الشبكات الإجتماعية

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...