یکی از اصلی ترین منابع در زمینه یادگیری ماشین و داده کاوی، فایل های CSV (یا Comma-Separated Values) هستند. در این نوع فایل ها، در هر خط، مقدارها با ویرگول از هم جدا شدخه اند. در واقع هر خط (سطر) در فایل CSV از چندین فیلد (ستون) تشکیل شده است که این فیلدها با علامت ویرگول از هم جدا می شوند. شکل زیر نمونه ای از محتوای یک فایل با فرمت CSV را نشان می دهد.

در پایتون دو روش برای خواندن این فایل ها وجود دارد، استفاده از ماژول پیشفرض پایتون به نام csv و یا استفاده از متد ()read_csv از کتابخانه pandas که در مطلب های این دوره استفاده از متد ()read_csv را آموزش می دهیم. مزیت و اهمیت استفاده از متد ()read_csv در ین است که محتوای فایل خوانده شده در غالب فرمت یکپارچه، یعنی DataFrame ذخیره و بارگذاری می شود.

برای شروع باید مطابق کدهای زیر ابتدا ماژول pandas را به برنامه ضمیمه کنید. در این مطلب آدرس فایل درون متغیری به نام dataSource ذخیره شده است. توجه کنید فایل بر روی وب و از طریق آدرس آن قابل دسترسی است ولی شما می توانید یک فایل روی هارد دیسک را نیز از طریق متد ()read_csv بخوانید. در نهایت نام متغیر به متد ()read_csv فرستاده شده است و پس از اجرای موفق، محتوای فایل درون متغیر dataset ذخیره خواهد شد.

در متد ()read_csv پارامتر sep (کوتاه شده Seprator) رشته ای است که کاراکتر جدا کننده را تعیین می کند. اگر آنرا تعیین نکنید، جدا کننده به صورت پیش فرض کاراکتر ویرگول خواهد بود ولی در برخی از فایل های با فرمت شبیه به CSV در هر خط مقدار هر فیلد با کاراکترهای یا : و یا حتی با فاصله (فضای خالی) از هم جدا می شوند. همچنین پارامتری به نام delimiter وجود دارد که مشابه و جایگزینی برای پارامتر sep است.

اما اگر جدا کننده فضای خالی مانند تک Space یا یک Tab باشد، می توانیم دو روش را استفاده کنیم، در روش اول می توانیم مقدار True را برای پارامتر delim_whitespace تعیین کنیم. مقدار این پارامتر به صورت پیش فرض برابر با False است. در روش دوم می توانیم مقدار ‘+s\’ را برای پارامتر sep در نظر بگیریم که از نظر مفاهیم عبارت های باقاعده (Regular Expression) به معنی وجود یک یا چندین فضای حالی متوالی است.

ستون سرآیند در فایل های CSV و پیدا

در فایل های CSV معمولا (و نه لزوما) اولین سطر را سرآیند (Header) می گویند که نام هر کدام از فیلدها را نشان می دهد. اگر این سطر وجود داشته باشد، پس نباید آنرا درون برنامه های خود به منظور پردازش داده ها یا تحلیل آنها استفاده کنیم. به طور مثال می خواهید داده های درون فایل CSV را به درون جدول پایگاه داده رابطه ای ذخیره کنیم، پس اگر سطر سرآیند وجود داشته باشد، پس باید در زمان خواندن فایل CSV، ابتدا از آن صرف نظر کرده و سپس بقیه محتوا را درون جدول ذخیره کنیم. در لینک زیر یک مثال ساده از ذخیره سازی محتوای یک فایل ساده CSV در پایگاه داده MySQL و توسط زبان پایتون نشان داده شده است.

اتصال به پایگاه داده MySQL توسط API

برای این منظور باید پارامتر skiprows را با مقدار عدد 1 به متد ()read_csv بفرستیم. skiprows=1 به معنی صرف نظر کردن از اولین سطر صرف نظر کنیم. در شکل زیر و پس از صرف نظر کردن از سطر اول، می بینید که دیگر خط سرآیند درون DataFrame وجود ندارد. توجه کنید با تعیین skiprows=1 حتما سطر اول در زمان بارگذاری صرف نظر می شود، پس حتما خود فایل CSV را بررسی کنید که سطر اول حتما سرآیند یا همان نام فیلدها باشد، در غیر این صورت شما یک خط داده را بی جهت از دست می دهید.

خواندن فایل های TSV

در کدهای زیر می خواهیم یک فایل CSV را از یک آدرس وب (URL) بخوانیم، پس تنها لازم است آدرس URL را به جای آدرس محلی دیسک به متد ()read_csv بفرستیم. همچنین می توانیم پارامترهای sep و delim_whitespace و skiprows را نیز همزمان با خواندن فایل csv از وب نیز تعیین کنیم. در مطلبهای بعدی و در متدهای دیگر نیز شما می توانید فایلی را از آدرس وب بخوانید و تنها محدود به متد ()read_csv نمی شود. به طر کلی توسط متدهای بارگذاری فایل ها در Pandas می توانید فایل ها را از اسکیما هایی مانند http و https و ftp یا حتی فایل های محلی با اسکیما //:file بخوانید.

خواندن فایل های TSV

فایل های TSV الگویی شبیه به فایل های CSV دارند با این تفاوت که جدا کننده در آنها Tab (هشت فضای خالی متوالی) است. برای این منظور بهتر است کاراکتر t\ را به عنوان کاراکتر جدا کننده در پارامتر sep تعیین کنیم. در کدهای زیر یک فایل TSV از وب خوانده می شود و در نهایت پنج سطر ابتدایی آن نمایش داده شده است.

دانلود سورس برنامه های این مطلب Pandas read csv files