pandas / الأساسي: التسميات والأنواع والمدخل المقبول / الدرس 4
عقود استيراد CSV والتحقق
حفظ المعرفات ومعنى المفقود عند الإدخال ثم التحقق من البنية والتغطية قبل التحليل.
في هذه الصفحة
أهداف الدرس
- اختيار سياسات صريحة للنوع والفاصل والترميز ورموز المفقود.
- فصل نجاح التحليل النصي من صلاحية المدخل التحليلي.
يحمل CSV صيغة ومخططاً محدوداً
يمثل CSV صفوفاً وحقولاً، لكنه لا يعلن بثقة أنواع المعرفات أو الوحدات أو وحدة الصف التجارية أو معنى المفقود. قد يكون 0017 رمز صنف لا العدد سبعة عشر، وقد تكون NA منطقة صالحة بدلاً من رمز فقد. حدد الفاصل والاقتباس والترميز والعناوين والأشكال المسموحة وتغطية الصفوف قبل اختيار خيارات المحلل. قد يقبل الملف نحوياً ويظل حاوياً هويات مكررة أو كميات مستحيلة أو فترة تقرير خاطئة. احفظ المصدر الاصطناعي الأصلي ودليل التحقق منفصلين عن النتيجة المنظفة، كي تظل قرارات التحويل قابلة للمراجعة.
اختيار رموز المفقود لكل عمود
يستخدم read_csv التوضيحي مصدراً في الذاكرة وأنواعاً صريحة قابلة للفقد وkeep_default_na=False. يحفظ 0017 والمعرف الحرفي NA نصين، ويعامل حقل units الفارغ مفقوداً عبر na_values خاصة بالعمود. هذه خيارات مقصودة لا وصفة استيراد عامة. قد يستخدم مصدر آخر رموز فقد مختلفة أو يطلب رفض الكمية الفارغة كلياً. الناتج المعلن مستنتج من البيانات ولم تشغل pandas. وحتى بعد قبول النوع، يلزم تحقق المجال، مثل عدم سلبية الوحدات والمعرفات المسموحة وتفرد وحدة الصف.
from io import StringIO
import pandas as pd
source = StringIO('item,units\n0017,2\nNA,\n')
frame = pd.read_csv(source, dtype={'item': 'string', 'units': 'Int64'}, keep_default_na=False, na_values={'units': ['']})
assert frame['item'].tolist() == ['0017', 'NA']
assert frame['units'].isna().tolist() == [False, True]
print(frame['item'].tolist())
['0017', 'NA']
يتوقع حفظ المعرفين نصاً واعتبار units الفارغ وحده مفقوداً؛ ولم تشغل pandas.
تحتاج أخطاء التحليل والتحويل محاسبة
يختلف الصف التالف نحوياً عن رمز عددي غير صالح وعن ملاحظة مفقودة صالحة. قد يخفض تجاوز الأسطر التالفة أو تحويل القيم غير الصالحة المجتمع بصمت إن لم يسجل الخط ما تغير. قد تغير فواصل الكسور والآلاف تفسير العدد، وقد تغير أخطاء الترميز المعرفات أو تمنع القراءة. اختر محرك التحليل بعد فحص دعمه الخيارات والصيغة المطلوبتين. لا تستنتج الصحة لمجرد أن read_csv أعاد DataFrame. صالح صفوف المصدر والمرفوض والمفقود المستحدث والمقبول وفق العقد، بدلاً من التخلص من الأدلة بحثاً عن تبسيط.
فحص رموز المصدر الدقيقة بالمكتبة القياسية
يقرأ csv.DictReader البيانات نفسها كنصوص عادية. يتحقق من بقاء الأصفار البادئة وNA الحرفية ومن فراغ رمز units الثاني. هذا فحص رموز مصدر، لا تحقق أنواع pandas الممتدة أو استنتاجها للمفقود. تحتاج الفواصل المقتبسة والأسطر الجديدة المضمنة محلل CSV حقيقياً، لا تقسيم الأسطر على الفواصل. تحقق من العناوين المتوقعة قبل مفاتيح القاموس، وميز ملفاً فارغاً من تقرير صالح بعناوين فقط. ينبغي أن يحدد عقد المدخل الكامل أي الحالتين مقبولة وأيهما تستلزم خطأ جودة نهائياً.
import csv
from io import StringIO
rows = list(csv.DictReader(StringIO('item,units\n0017,2\nNA,\n')))
assert [row['item'] for row in rows] == ['0017', 'NA']
assert rows[1]['units'] == ''
print([row['item'] for row in rows])
['0017', 'NA']
يحفظ المحلل النصوص الدقيقة ولا يثبت نوع pandas أو سلوك NA.
جعل الإدخال قابلاً للتكرار ومحدوداً
سجل هوية المصدر وإصدار محتواه ومخططه وخيارات المحلل وإصدارات pandas وPython المختارة. لا تقرأ ملف latest اعتباطياً عند إعادة نتيجة تاريخية. قد يحتاج المدخل الكبير تجزئة أو صيغة تخزين أخرى، لكن الاختيار يجب أن يحفظ قواعد التفرد والتجميع العامة، لا أن يفحص كل جزء مستقلاً فحسب. يقرأ الدرس سلسلة اصطناعية في الذاكرة فقط؛ ولا يثبت خلفية أو يصل لملف بعيد أو قاعدة. يبقى مثال pandas غير منفذ، وتنفذ تأكيدات المحلل القياسي فقط، مع حفظ ادعائها الأضيق في التقرير.
الأخطاء الشائعة وإصلاحها
تحول الصنف 0017 إلى 17 وفشل مطابقته.
- لماذا يحدث؟
- استنتاج نص الهوية أو تحويله عدداً.
- كيف تصلحه؟
- اقرأ الهوية بعقد نص صريح وصالح المفاتيح المتغيرة.
- كيف تتجنب تكراره؟
- أدرج معرفات بأصفار بادئة في اختبارات الإدخال.
اختفاء معرف NA صالح ضمن المفقود.
- لماذا يحدث؟
- تعارض تعرف الرموز الافتراضي مع معنى المصدر.
- كيف تصلحه؟
- اختر رموز فقد مقصودة وخاصة بالأعمدة عند الحاجة.
- كيف تتجنب تكراره؟
- اختبر الرموز التجارية والفراغ منفصلين.
حذف المنظف صفوفاً تالفة دون عد المرفوض.
- لماذا يحدث؟
- تغيير معالجة الخطأ التغطية بصمت.
- كيف تصلحه؟
- احفظ دليل الرفض وصالح المقبول ومجتمع المصدر.
- كيف تتجنب تكراره؟
- اجعل كل تجاوز أو تحويل مرئياً.
اختبر فهمك
1. هل يثبت نجاح read_csv احتواء الملف صفاً صالحاً لكل صنف؟
اعرض الحل المشروح
لا؛ التحليل جزء من الإدخال فقط. تحقق من الهوية والوحدة والقيم والفترة والتغطية منفصلة. قد يحمل الإطار مكرراً أو كميات فاسدة، فاحفظ تقرير جودة ولا تعتبر البناء قبولاً تحليلياً.
2. لماذا يعطل المثال رموز NA الافتراضية ويعد units الفارغ مفقوداً؟
اعرض الحل المشروح
لأن NA معرف نص صالح، بينما يعني فراغ units كمية مجهولة وفق العقد. تحفظ قواعد الأعمدة المعنيين. يبررها معنى المصدر لا تفضيل عام لإزالة المفقود أو جعل كل فراغ صفراً.
أهم ما تعلمته
- إعدادات المحلل جزء من عقد البيانات.
- احفظ تغطية المرفوض والمحول مع المقبول.