FA-TOOLS — Header Component

آموزش read_csv و read_excel در pandas

سلام رفیق برنامه‌نویس! اگه با داده‌ها سر و کار داری، حتماً می‌دونی که اول از همه باید اونا رو بیاری تو محیط کارِت. تو پایتون و با کتابخونه خفن پانداس، دو تا ابزار فوق‌العاده کاربردی برای این کار داریم: read_csv و read_excel. این دو تا تابع مثل جادوگر عمل می‌کنن و فایل‌های CSV و اکسل رو یه دست و تمیز تبدیل می‌کنن به DataFrame که عشق کنیم باهاشون کار کنیم.

هدف این مقاله اینه که از صفر تا صدِ استفاده از این دو تا تابع رو با هم یاد بگیریم، از ساده‌ترین حالت تا پیچیده‌ترین تنظیمات. قراره کاری کنیم که دیگه هیچ فایلی نتونه جلوی تحلیل‌هات رو بگیره! راستی، اگه دنبال ابزارها و کدهای آماده بیشتری هستی، حتماً سری به فروشگاه ابزارهای ما بزن. اونجا کلی چیز باحال برای راحتی کارِت پیدا می‌کنی.

💡 نقشه راه سریع: گنجینه داده‌ها در دستان تو!

🚀 شروع با Pandas

  • نصب و ایمپورت

📁 read_csv: استاد CSVها

  • کاربردهای پایه
  • پارامترهای کلیدی
  • حل مشکلات Encoding

📊 read_excel: قهرمان اکسل

  • خواندن شیت‌ها
  • تنظیمات پیشرفته
  • پشتیبانی از فرمت‌ها

🛠️ عیب‌یابی و ترفندها

  • خطاهای رایج
  • بهینه‌سازی عملکرد

همه اینها رو با مثال‌های عملی و کدهای آماده یاد می‌گیریم! 📞 09202232789

چرا یادگیری این دو تابع حیاتیه؟

آموزش read_csv و read_excel در pandas — تصویر 1

داده‌ها، قلب هر پروژه تحلیل و علم داده هستن. اگه نتونی داده‌ها رو درست و حسابی وارد محیط کارِت کنی، عملاً هیچ کاری از پیش نمی‌بری. فایل‌های CSV و Excel هم که دیگه نیاز به معرفی ندارن؛ رایج‌ترین فرمت‌ها برای ذخیره و تبادل داده‌ان. پس اگه می‌خوای یه دیتاساینتیست یا تحلیل‌گر داده‌ی خفن باشی، باید تو کار با این توابع استاد بشی. تسلط به read_csv و read_excel بهت اجازه میده با هر نوع داده‌ای، از داده‌های ساده فروش یه مغازه گرفته تا لاگ‌های پیچیده سرور، کار کنی.

ضمناً، استفاده درست از این توابع می‌تونه کلی تو زمان و منابع سیستمی‌ت صرفه‌جویی کنه، مخصوصاً وقتی با فایل‌های بزرگ سر و کار داری. بیا بریم سراغ جزئیات!

تابع `read_csv`؛ کلید ورود به دنیای CSVها

آموزش read_csv و read_excel در pandas — تصویر 2

فایل‌های CSV (Comma Separated Values) فایل‌های متنی ساده‌ای هستن که داده‌ها رو با یه جداکننده (معمولاً کاما) از هم جدا می‌کنن. برای همین هم خیلی محبوب و کم‌حجم‌ان. پانداس با read_csv این فایل‌ها رو برات به DataFrameهای قدرتمند تبدیل می‌کنه.

شروع کار با `read_csv`: یه مثال ساده

اول از همه، یه فایل data.csv خیالی با محتوای زیر درست می‌کنیم:

نام,سن,شهر
علی,25,تهران
سارا,30,اصفهان
رضا,22,شیراز

حالا کد پایتون:

import pandas as pd

# فایل CSV رو می‌خونیم
df = pd.read_csv('data.csv')

# DataFrame رو نمایش می‌دیم
print(df)

خروجی:

   نام  سن    شهر
0  علی  25  تهران
1  سارا  30  اصفهان
2  رضا  22  شیراز

می‌بینی چقدر راحت DataFrame رو ساخت؟ خود پانداس به صورت هوشمند ردیف اول رو به عنوان هدر شناسایی کرد و یه ایندکس عددی هم بهش داد.

برای دیدن کدهای آماده بیشتر در پایتون، می‌تونی سری به بخش اسنیپت‌های پایتون ما بزنی.

پارامترهای مهم `read_csv` که باید بشناسیم

این تابع پر از پارامترهای کاربردیه که بهت قدرت میده کنترل کاملی روی نحوه خوندن داده‌ها داشته باشی. چندتا از مهم‌ترین‌هاشون رو با هم مرور می‌کنیم:

پارامتر کاربرد
sep یا delimiter مشخص کردن جداکننده ستون‌ها (مثلاً ‘,’، ‘;’ یا ‘t’)
header مشخص کردن شماره ردیفی که هدر (عنوان ستون‌ها) قرار داره (0 برای ردیف اول، None اگه هدر نداره)
index_col مشخص کردن ستونی که باید به عنوان ایندکس DataFrame استفاده بشه (نام ستون یا شماره ستون)
names یک لیست از نام ستون‌ها رو به DataFrame میده (اگه فایل هدر نداره یا می‌خوای عوضشون کنی)
skiprows تعداد ردیف‌ها از ابتدای فایل که باید نادیده گرفته بشن (یا لیستی از شماره ردیف‌ها)
na_values یک لیست از مقادیری که باید به NaN (مقادیر گمشده) تبدیل بشن (مثلاً [‘NA’, ‘NULL’, ‘ ‘])
encoding مشخص کردن کدگذاری فایل (مثلاً ‘utf-8’, ‘latin1’, ‘cp1256’)
dtype مشخص کردن نوع داده برای هر ستون (مثلاً {‘سن’: int, ‘شهر’: str})
parse_dates لیستی از ستون‌هایی که باید به نوع تاریخ-زمان تبدیل بشن
chunksize تعداد ردیف‌ها برای خوندن هر قسمت از فایل‌های بزرگ (برمی‌گردونه TextFileReader)

سناریوهای پیشرفته با `read_csv`

۱. مدیریت جداکننده‌های مختلف و فایل بدون هدر

فرض کن یه فایل semicolon_data.csv داری که ستون‌هاش با سیمی‌کالن (;) جدا شدن و ردیف اول هدر نیست:

1;علی;25;تهران
2;سارا;30;اصفهان
3;رضا;22;شیراز
df_no_header = pd.read_csv(
    'semicolon_data.csv',
    sep=';',           # جداکننده رو سیمی‌کالن تعیین می‌کنیم
    header=None,       # می‌گیم فایل هدر نداره
    names=['ID', 'نام', 'سن', 'شهر'] # خودمون اسم ستون‌ها رو می‌ذاریم
)
print(df_no_header)

۲. سروکله زدن با encoding (مشکلات کاراکترهای فارسی)

اگه با فایل‌های فارسی کار می‌کنی و خطای UnicodeDecodeError می‌گیری، ۹۰ درصد مواقع مشکل از encoding هست. 'utf-8' کدگذاری استاندارد و خوبیه، اما ممکنه فایل‌ها با 'windows-1256' یا 'latin1' ذخیره شده باشن.

try:
    df_persian = pd.read_csv('persian_data.csv', encoding='utf-8')
except UnicodeDecodeError:
    print("خطا در UTF-8. امتحان با windows-1256...")
    df_persian = pd.read_csv('persian_data.csv', encoding='windows-1256')

print(df_persian.head())

نکته مهم: همیشه اول با 'utf-8' شروع کن و اگه خطا دادی، برو سراغ 'windows-1256' یا 'latin1'. این بهترین استراتژی برای حل مشکل کدینگ هست.

۳. خوندن فایل‌های خیلی بزرگ با `chunksize`

اگه فایلت چند گیگابایته و رم سیستمت کمه، نمی‌تونی همشو یکجا بخونی. chunksize میاد وسط تا فایل رو تیکه تیکه بخونه و پردازش کنه.

# فرض کن data_large.csv خیلی بزرگه
chunk_iterator = pd.read_csv('data_large.csv', chunksize=10000) # هر بار 10000 ردیف

total_rows = 0
for chunk in chunk_iterator:
    # اینجا هر کاری که می‌خوای با هر تیکه (chunk) انجام بده
    total_rows += len(chunk)
    # مثلاً می‌تونی chunk رو ذخیره کنی یا پردازش کنی

print(f"تعداد کل ردیف‌ها: {total_rows}")

این روش برای کار با فایل‌های داده‌ی عظیم خیلی موثره و از کرش کردن برنامت به خاطر کمبود حافظه جلوگیری می‌کنه.

تابع `read_excel`؛ دروازه ورود به اطلاعات جدولی اکسل

آموزش read_csv و read_excel در pandas — تصویر 3

فایل‌های اکسل (.xlsx، .xls و غیره) هم خیلی رایج‌ان و معمولاً پیچیدگی بیشتری دارن؛ مثلاً می‌تونن چندین شیت (sheet) داشته باشن، فرمت‌بندی‌های مختلف یا حتی فرمول. read_excel پانداس این کار رو هم برات آسون می‌کنه.

گام به گام با `read_excel`: یه فایل اکسل ساده

فرض کن یه فایل sample.xlsx داری با یه شیت به اسم Sheet1 و محتوای زیر:

# Sheet1
میوه,قیمت,تعداد
سیب,10000,50
پرتقال,15000,30
موز,20000,20
import pandas as pd

# فایل اکسل رو می‌خونیم
df_excel = pd.read_excel('sample.xlsx')

print(df_excel)

خروجی:

     میوه  قیمت  تعداد
0    سیب  10000   50
1  پرتقال  15000   30
2    موز  20000   20

پارامترهای کلیدی `read_excel` برای کنترل کامل

read_excel هم مثل read_csv کلی پارامتر داره، با این تفاوت که اینجا مفاهیمی مثل شیت هم اضافه میشه:

  • sheet_name: مهم‌ترین پارامتر! مشخص می‌کنه کدوم شیت رو بخونی. می‌تونه شماره شیت (مثل 0 برای اولین شیت)، اسم شیت (مثلاً 'Sheet1') یا لیستی از اسم/شماره شیت‌ها باشه. اگه None بدی، همه شیت‌ها رو برات تو یه دیکشنری می‌خونه.
  • header: مثل read_csv، شماره ردیفی که هدر هست رو مشخص می‌کنه.
  • index_col: مشخص می‌کنه کدوم ستون ایندکس بشه.
  • names: برای تعیین دستی اسم ستون‌ها (وقتی هدر نداری یا می‌خوای عوض کنی).
  • skiprows: تعداد ردیف‌هایی که از بالای شیت باید نادیده گرفته بشن.
  • usecols: ستون‌های خاصی که می‌خوای بخونی (مثلاً 'A:C' یا [0, 2, 4]).
  • dtype: برای تعیین نوع داده ستون‌ها.
  • engine: برای مشخص کردن موتور پانداس برای خوندن فایل اکسل. 'openpyxl' برای فرمت‌های جدیدتر (.xlsx) و 'xlrd' برای فرمت‌های قدیمی‌تر (.xls) استفاده میشه. اگه نصب نشده باشن، پانداس معمولا خطا میده و باید نصبشون کنی (مثلاً pip install openpyxl xlrd).

ترفندها و نکات `read_excel` برای کارهای پیچیده

۱. خوندن شیت‌های خاص یا چند شیت همزمان

فرض کن فایل multi_sheet.xlsx دو تا شیت داره: 'محصولات' و 'سفارشات'.

# خوندن یک شیت خاص با نام
df_products = pd.read_excel('multi_sheet.xlsx', sheet_name='محصولات')
print("DataFrame محصولات:")
print(df_products.head())

# خوندن شیت دوم (ایندکس 1)
df_orders = pd.read_excel('multi_sheet.xlsx', sheet_name=1)
print("nDataFrame سفارشات:")
print(df_orders.head())

# خوندن همه شیت‌ها (برمی‌گردونه دیکشنری از DataFrameها)
all_sheets = pd.read_excel('multi_sheet.xlsx', sheet_name=None)
print("nنام شیت‌های خوانده شده:")
for sheet_name, df_sheet in all_sheets.items():
    print(f"- {sheet_name}: {len(df_sheet)} ردیف")

۲. تعیین محدوده خاص برای خوندن (usecols)

می‌تونی فقط ستون‌های خاصی رو از یه شیت بخونی:

# فقط ستون‌های 'میوه' و 'قیمت' رو بخون
df_selected_cols = pd.read_excel('sample.xlsx', usecols=['میوه', 'قیمت'])
print(df_selected_cols)

# یا با شماره ستون: فقط ستون اول (0) و سوم (2) رو بخون
df_selected_cols_by_index = pd.read_excel('sample.xlsx', usecols=[0, 2])
print(df_selected_cols_by_index)

usecols واقعا کار راه اندازه وقتی نمی‌خوای کل فایل سنگین رو لود کنی و فقط به چند ستونش نیاز داری. این کار بهینه‌سازی منابع رو به همراه داره.

چالش‌ها و راه‌حل‌های مشترک (Troubleshooting)

تو کار با داده‌ها، هر از گاهی به یه سری مشکل برمی‌خوریم. اینجا چندتا از رایج‌ترین خطاهایی که ممکنه با read_csv و read_excel برات پیش بیاد و راه‌حل‌هاشون رو می‌گیم.

خطاهای رایج و راه حل‌شون

۱. FileNotFoundError

این خطا یعنی فایل تو مسیر مشخص شده پیدا نشده.

راه‌حل:

  • مطمئن شو که اسم فایل رو درست نوشتی (با پسوند).
  • مسیر فایل رو چک کن. اگه فایل تو همون دایرکتوری‌ای که کد پایتون رو اجرا می‌کنی نیست، باید مسیر کاملش رو بدی (مثلاً 'C:/Users/YourUser/Documents/data.csv').
  • تو لینوکس/مک به Case Sensitivity (بزرگ و کوچکی حروف) اسم فایل‌ها دقت کن.

۲. UnicodeDecodeError

این خطا تو فایل‌های CSV رایجه و معمولاً به خاطر اینه که encoding رو اشتباه دادی. مخصوصا با متن‌های فارسی که از “غلط” املایی های دیگه ای هم استفاده میکنن ممکنه این مشکل بیشتر بشه.

راه‌حل:

  • اول encoding='utf-8' رو امتحان کن.
  • اگه جواب نداد، encoding='windows-1256' (برای فارسی در ویندوز) یا encoding='latin1' رو امتحان کن.
  • گاهی اوقات فایل ممکنه با 'utf-8-sig' ذخیره شده باشه (BOM).

۳. ParserError (برای CSV) یا XLRDError/BadZipFile (برای Excel)

این خطاها یعنی پانداس نتونسته فایل رو به درستی تجزیه (parse) کنه. تو CSV معمولاً به خاطر جداکننده‌های نامنظم، ردیف‌های خالی یا فرمت‌بندی عجیب و غریبه. تو اکسل هم ممکنه فایل خراب باشه یا فرمتش قدیمی باشه.

راه‌حل:

  • برای CSV:
    • پارامتر sep رو دقیق تنظیم کن.
    • از error_bad_lines=False (در نسخه‌های قدیمی‌تر) یا on_bad_lines='skip' (در نسخه‌های جدیدتر) استفاده کن تا ردیف‌های مشکل‌دار رو رد کنه.
    • فایل رو دستی باز کن و به دنبال ناسازگاری‌ها بگرد.
  • برای Excel:
    • مطمئن شو که openpyxl (برای .xlsx) و xlrd (برای .xls) نصب باشن (pip install openpyxl xlrd).
    • پارامتر engine رو تنظیم کن (مثلاً engine='xlrd').
    • فایل اکسل رو با اکسل باز کن و مطمئن شو خراب نیست.

جمع‌بندی و گام بعدی

خب رفیق، تا اینجا با read_csv و read_excel پانداس آشنا شدیم و یاد گرفتیم چطور فایل‌های داده رو بخونیم و کلی پارامتر کاربردی برای کنترل بهتر این فرآیند رو هم مرور کردیم. حالا می‌تونی با اطمینان داده‌هاتو وارد پایتون کنی و آماده تحلیل و پردازش بشی.

یادت باشه که تمرین، کلید اصلیه. سعی کن با فایل‌های مختلف (CSV، اکسل) و پارامترهای متفاوت کار کنی تا دستت راه بیفته و برای هر سناریویی آماده باشی. دنیای داده‌ها خیلی بزرگه و این تازه اول راهه! حالا که داده‌ها رو خوندی، می‌تونی بری سراغ پاکسازی، تحلیل، بصری‌سازی و مدل‌سازی. موفق باشی!

پرسش‌های متداول (FAQ)

Q: چطور می‌تونم تشخیص بدم که فایل CSV من چه جداکننده‌ای داره؟

A: ساده‌ترین راه اینه که فایل رو با یه ویرایشگر متن (مثل Notepad++، VS Code یا حتی Notepad) باز کنی و ببینی ستون‌ها با چی از هم جدا شدن. معمولا کاما (,)، سیمی‌کالن (;) یا تب (t) هستن. اگه تب بود، باید sep='t' رو استفاده کنی.

Q: اگه بخوام فقط چندتا ستون خاص رو از فایل اکسل بخونم، چی کار کنم؟

A: از پارامتر usecols استفاده کن. می‌تونی یه لیست از نام ستون‌ها یا شماره ستون‌ها رو بهش بدی. مثلاً usecols=['نام', 'سن'] یا usecols=[0, 1].

Q: وقتی از chunksize برای خوندن فایل‌های بزرگ استفاده می‌کنم، چطور همه داده‌ها رو در آخر با هم ترکیب کنم؟

A: بعد از اینکه با حلقه for روی chunk_iterator (خروجی read_csv با chunksize) ایتریت کردی، می‌تونی هر chunk رو به یه لیست اضافه کنی و در نهایت با pd.concat(list_of_chunks) همه رو به یه DataFrame نهایی تبدیل کنی. البته این روش دوباره ممکنه مشکل حافظه ایجاد کنه، پس اگه واقعاً فایلت غول‌آساست، بهتره پردازش رو روی هر chunk انجام بدی و نتیجه رو ذخیره کنی نه اینکه همه رو یکجا تو رم نگه داری.

Q: چطور می‌تونم مطمئن بشم که تاریخ‌ها به درستی خونده میشن؟

A: از پارامتر parse_dates استفاده کن. این پارامتر یه لیست از نام ستون‌هایی رو می‌گیره که پانداس باید سعی کنه اونها رو به فرمت تاریخ و زمان تبدیل کنه. اگه فرمت تاریخ‌ها استاندارد نباشه، ممکنه باز هم مشکل داشته باشی و لازم باشه با پارامتر date_parser یه تابع سفارشی برای تبدیل بنویسی، اما برای اکثر موارد parse_dates کار رو انجام میده.

اگه دنبال کدهای آماده و اسنیپت‌های بیشتری هستی، حتماً به بخش اسنیپت‌های ما سر بزن!

Table of Contents

آخرین نوشته‌ها