در ایجاد دیتافریمهای پانداس خبره شوید. این راهنما، راهاندازی دیتافریمها از دیکشنریها، لیستها، آرایههای نامپای و موارد دیگر را برای متخصصان داده در سراسر جهان پوشش میدهد.
ایجاد پانداس دیتافریم: بررسی عمیق راهاندازی ساختار داده
به دنیای دستکاری داده با پایتون خوش آمدید! در قلب تقریباً هر وظیفه تجزیه و تحلیل داده، کتابخانه Pandas و سنگ بنای آن DataFrame قرار دارد. DataFrame را به عنوان نسخهای هوشمند، قدرتمند و انعطافپذیر از یک صفحه گسترده یا یک جدول پایگاه داده در نظر بگیرید که درست در محیط پایتون شما زندگی میکند. این ابزار اصلی برای پاکسازی، تبدیل، تجزیه و تحلیل و تجسم دادهها است. اما قبل از اینکه بتوانید هر یک از این جادوهای داده را انجام دهید، ابتدا باید در هنر ایجاد یک DataFrame تسلط پیدا کنید. نحوه راهاندازی این ساختار داده اساسی میتواند زمینه را برای کل تحلیل شما فراهم کند.
این راهنمای جامع برای مخاطبان جهانی از تحلیلگران، دانشمندان و مهندسان داده مشتاق و فعال طراحی شده است. ما متداولترین و قدرتمندترین روشها را برای ایجاد Pandas DataFrame از پایه بررسی خواهیم کرد. چه دادههای شما در یک دیکشنری، یک لیست، یک آرایه NumPy یا فرمت دیگری باشد، این مقاله دانش و مثالهای عملی را برای راهاندازی DataFrameهای شما با اطمینان و کارایی فراهم میکند. بیایید پایه و اساس خود را بنا کنیم.
Pandas DataFrame دقیقاً چیست؟
قبل از شروع ساخت، بیایید روشن کنیم چه چیزی را میسازیم. Pandas DataFrame یک ساختار داده جدولی دو بعدی، با قابلیت تغییر اندازه و بالقوه ناهمگن است. بیایید این را بررسی کنیم:
- دو بعدی: این ساختار دارای سطرها و ستونها است، درست مانند یک صفحه گسترده.
- با قابلیت تغییر اندازه: میتوانید پس از ایجاد DataFrame، سطرها و ستونها را اضافه یا حذف کنید.
- ناهمگن: ستونها میتوانند انواع دادههای متفاوتی داشته باشند. به عنوان مثال، یک ستون میتواند حاوی اعداد (اعداد صحیح یا اعشاری)، دیگری حاوی متن (رشتهها) و سومی حاوی تاریخ یا مقادیر بولی (True/False) باشد.
یک DataFrame سه جزء اصلی دارد:
- داده: مقادیر واقعی موجود در ساختار، که در سطرها و ستونها سازماندهی شدهاند.
- ایندکس: برچسبهای سطرها. اگر ایندکسی ارائه ندهید، Pandas یک ایندکس پیشفرض از 0 ایجاد میکند. ایندکس راهی قدرتمند برای دسترسی و همترازی دادهها فراهم میکند.
- ستونها: برچسبهای ستونها. اینها برای دسترسی به سریهای داده خاص در DataFrame حیاتی هستند.
درک این ساختار، کلید درک نحوه ایجاد و دستکاری مؤثر DataFrameها است.
اساس کار: وارد کردن Pandas
اولین قدم. برای استفاده از Pandas، باید کتابخانه را به اسکریپت یا نوتبوک پایتون خود وارد کنید. قرارداد جهانی پذیرفته شده، که توسط متخصصان در سراسر جهان دنبال میشود، وارد کردن آن با نام مستعار pd است. این نام مستعار ساده، کد شما را خواناتر و مختصرتر میکند.
import pandas as pd
import numpy as np # اغلب در کنار Pandas استفاده میشود، بنابراین ما نیز آن را وارد میکنیم.
با این یک خط، قدرت کامل کتابخانه Pandas را باز کردهاید. اکنون، به هسته این راهنما میپردازیم: ایجاد DataFrameها.
روشهای اصلی ایجاد: از ساده تا پیچیده
سازنده pd.DataFrame() فوقالعاده متنوع است. این سازنده میتواند انواع مختلفی از ورودیها را بپذیرد. اکنون مهمترین روشها را بررسی خواهیم کرد، از رایجترین تا موارد تخصصیتر.
1. ایجاد DataFrame از یک دیکشنری از لیستها یا آرایهها
این مسلماً رایجترین و بصریترین روش برای ایجاد یک DataFrame است. شما با یک دیکشنری پایتون شروع میکنید که در آن کلیدها به نام ستونها و مقادیر به لیستهایی (یا آرایههای NumPy یا Pandas Series) تبدیل میشوند که حاوی دادههای هر ستون هستند.
نحوه کار: Pandas هر کلید دیکشنری را به یک سربرگ ستون و هر لیست از مقادیر را به سطرهای آن ستون نگاشت میکند. یک الزام حیاتی در اینجا این است که همه لیستها باید طول یکسانی داشته باشند، زیرا هر لیست یک ستون کامل از دادهها را نشان میدهد.
مثال:
بیایید یک DataFrame حاوی اطلاعاتی در مورد شهرهای مختلف در سراسر جهان ایجاد کنیم.
# دادهها سازماندهی شده بر اساس ستون
city_data = {
'City': ['Tokyo', 'Delhi', 'Shanghai', 'São Paulo', 'Mumbai'],
'Country': ['Japan', 'India', 'China', 'Brazil', 'India'],
'Population_Millions': [37.3, 32.0, 28.5, 22.4, 20.9],
'Is_Coastal': [True, False, True, False, True]
}
# DataFrame را ایجاد کنید
df_from_dict = pd.DataFrame(city_data)
print(df_from_dict)
خروجی:
City Country Population_Millions Is_Coastal
0 Tokyo Japan 37.3 True
1 Delhi India 32.0 False
2 Shanghai China 28.5 True
3 São Paulo Brazil 22.4 False
4 Mumbai India 20.9 True
نکته کلیدی: این روش زمانی عالی است که دادههای شما به طور طبیعی بر اساس ویژگی یا دستهبندی سازماندهی شدهاند. این روش تمیز، خوانا است و ساختار دیکشنری شما را مستقیماً به یک فرمت جدولی تبدیل میکند.
2. ایجاد DataFrame از یک لیست از دیکشنریها
یک روش جایگزین و به همان اندازه قدرتمند، استفاده از لیستی است که در آن هر عنصر یک دیکشنری است. در این ساختار، هر دیکشنری یک سطر واحد را نشان میدهد و کلیدهای آن، نام ستونهای داده آن سطر را نشان میدهند.
نحوه کار: Pandas از طریق لیست تکرار میکند. برای هر دیکشنری، یک سطر جدید ایجاد میکند. کلیدهای دیکشنری برای تعیین ستونها استفاده میشوند. این روش فوقالعاده انعطافپذیر است زیرا اگر دیکشنری یک کلید را نداشته باشد، Pandas به طور خودکار آن سلول را در سطر مربوطه با NaN (Not a Number) پر میکند، که نشانگر استاندارد برای دادههای از دست رفته در Pandas است.
مثال:
بیایید همان دادههای شهر را نمایش دهیم، اما این بار ساختار آن به صورت لیستی از رکوردها است.
# دادهها سازماندهی شده بر اساس سطر (رکورد)
records_data = [
{'City': 'Tokyo', 'Country': 'Japan', 'Population_Millions': 37.3, 'Is_Coastal': True},
{'City': 'Delhi', 'Country': 'India', 'Population_Millions': 32.0, 'Is_Coastal': False},
{'City': 'Shanghai', 'Country': 'China', 'Population_Millions': 28.5},
{'City': 'São Paulo', 'Country': 'Brazil', 'Population_Millions': 22.4, 'Is_Coastal': False},
{'City': 'Cairo', 'Country': 'Egypt', 'Timezone': 'EET'} # به ساختار متفاوت توجه کنید
]
# DataFrame را ایجاد کنید
df_from_list_of_dicts = pd.DataFrame(records_data)
print(df_from_list_of_dicts)
خروجی:
City Country Population_Millions Is_Coastal Timezone
0 Tokyo Japan 37.3 True NaN
1 Delhi India 32.0 False NaN
2 Shanghai China 28.5 NaN NaN
3 São Paulo Brazil 22.4 False NaN
4 Cairo Egypt NaN NaN EET
توجه کنید که Pandas چگونه ناهماهنگیها را به زیبایی مدیریت کرد. مقدار 'Is_Coastal' برای شانگهای NaN است زیرا از دیکشنری آن حذف شده بود. یک ستون 'Timezone' جدید برای قاهره ایجاد شد، با NaN برای سایر شهرها. این امر آن را به انتخابی عالی برای کار با دادههای نیمهساختاریافته، مانند پاسخهای JSON از APIها تبدیل میکند.
نکته کلیدی: از این روش زمانی استفاده کنید که دادههای شما به صورت مجموعهای از رکوردها یا مشاهدات وارد میشوند. این روش در مدیریت دادههای از دست رفته و تغییرات در ساختار رکوردها قوی است.
3. ایجاد DataFrame از یک آرایه NumPy
برای کسانی که در محاسبات علمی، یادگیری ماشین یا هر زمینهای که شامل عملیات عددی سنگین است کار میکنند، دادهها اغلب از آرایههای NumPy سرچشمه میگیرند. Pandas بر پایه NumPy ساخته شده است و این ادغام بین این دو را بیدرز و بسیار کارآمد میکند.
نحوه کار: شما یک آرایه 2D NumPy را به سازنده pd.DataFrame() ارسال میکنید. به طور پیشفرض، Pandas ایندکسها و ستونهای مبتنی بر عدد صحیح را ایجاد میکند. با این حال، میتوانید (و باید) با استفاده از پارامترهای index و columns برچسبهای معنیداری ارائه دهید.
مثال:
بیایید یک DataFrame از یک آرایه NumPy 5x4 که به طور تصادفی تولید شده است، ایجاد کنیم که خوانشهای حسگر را در طول زمان نشان میدهد.
# یک آرایه NumPy 5x4 با دادههای تصادفی ایجاد کنید
data_np = np.random.rand(5, 4)
# برچسبهای ستون و ایندکس را تعریف کنید
columns = ['Sensor_A', 'Sensor_B', 'Sensor_C', 'Sensor_D']
index = pd.to_datetime(['2023-10-27 10:00', '2023-10-27 10:01', '2023-10-27 10:02', '2023-10-27 10:03', '2023-10-27 10:04'])
# DataFrame را ایجاد کنید
df_from_numpy = pd.DataFrame(data=data_np, index=index, columns=columns)
print(df_from_numpy)
خروجی (اعداد تصادفی شما متفاوت خواهند بود):
Sensor_A Sensor_B Sensor_C Sensor_D
2023-10-27 10:00:00 0.123456 0.987654 0.555555 0.111111
2023-10-27 10:01:00 0.234567 0.876543 0.666666 0.222222
2023-10-27 10:02:00 0.345678 0.765432 0.777777 0.333333
2023-10-27 10:03:00 0.456789 0.654321 0.888888 0.444444
2023-10-27 10:04:00 0.567890 0.543210 0.999999 0.555555
در این مثال، ما همچنین یک ویژگی قدرتمند را معرفی کردیم: استفاده از DatetimeIndex برای دادههای سری زمانی، که مجموعهای وسیع از قابلیتهای تحلیل مبتنی بر زمان را در Pandas فعال میکند.
نکته کلیدی: این کارآمدترین روش از نظر مصرف حافظه برای ایجاد یک DataFrame از دادههای عددی همگن است. این انتخاب استاندارد برای ارتباط با کتابخانههایی مانند NumPy، Scikit-learn یا TensorFlow است.
4. ایجاد DataFrame از یک لیست از لیستها
این روش از نظر مفهومی شبیه به ایجاد از یک آرایه NumPy است اما از لیستهای استاندارد پایتون استفاده میکند. این یک راه ساده برای تبدیل دادههای جدولی ذخیره شده در قالب لیستهای تودرتو است.
نحوه کار: شما یک لیست ارائه میدهید که در آن هر لیست داخلی یک سطر از دادهها را نشان میدهد. همانند آرایههای NumPy، اکیداً توصیه میشود که نام ستونها را از طریق پارامتر columns برای وضوح مشخص کنید.
مثال:
# دادهها به صورت یک لیست از سطرها
product_data = [
['P001', 'Laptop', 1200.00, 'Electronics'],
['P002', 'Mouse', 25.50, 'Electronics'],
['P003', 'Desk Chair', 150.75, 'Furniture'],
['P004', 'Keyboard', 75.00, 'Electronics']
]
# نام ستونها را تعریف کنید
column_names = ['ProductID', 'ProductName', 'Price_USD', 'Category']
# DataFrame را ایجاد کنید
df_from_list_of_lists = pd.DataFrame(product_data, columns=column_names)
print(df_from_list_of_lists)
خروجی:
ProductID ProductName Price_USD Category 0 P001 Laptop 1200.00 Electronics 1 P002 Mouse 25.50 Electronics 2 P003 Desk Chair 150.75 Furniture 3 P004 Keyboard 75.00 Electronics
نکته کلیدی: این یک روش ساده و مؤثر است برای زمانی که دادههای شما قبلاً به صورت لیستی از سطرها ساختار یافتهاند، مثلاً هنگام خواندن از یک فرمت فایلی که سربرگ ندارد.
راهاندازی پیشرفته: سفارشیسازی DataFrame شما
فراتر از ارائه دادههای خام، سازنده pd.DataFrame() چندین پارامتر را برای کنترل ساختار و ویژگیهای DataFrame جدید شما از لحظه ایجاد آن ارائه میدهد.
تعیین ایندکس
ما قبلاً پارامتر `index` را در عمل دیدهایم. ایندکس بخش مهمی از DataFrame است که برچسبهایی را برای سطرها فراهم میکند که برای جستجوهای سریع، همترازی دادهها و موارد دیگر استفاده میشوند. در حالی که Pandas یک ایندکس عددی پیشفرض (0, 1, 2, ...) ارائه میدهد، تنظیم یک ایندکس معنیدار میتواند کار با دادههای شما را بسیار آسانتر کند.
مثال: بیایید از مثال دیکشنری لیستهای خود دوباره استفاده کنیم اما ستون `City` را به عنوان ایندکس هنگام ایجاد تنظیم کنیم.
city_data = {
'Country': ['Japan', 'India', 'China', 'Brazil', 'India'],
'Population_Millions': [37.3, 32.0, 28.5, 22.4, 20.9],
'Is_Coastal': [True, False, True, False, True]
}
city_names = ['Tokyo', 'Delhi', 'Shanghai', 'São Paulo', 'Mumbai']
# DataFrame را با یک ایندکس سفارشی ایجاد کنید
df_with_index = pd.DataFrame(city_data, index=city_names)
print(df_with_index)
خروجی:
Country Population_Millions Is_Coastal
Tokyo Japan 37.3 True
Delhi India 32.0 False
Shanghai China 28.5 True
São Paulo Brazil 22.4 False
Mumbai India 20.9 True
اکنون میتوانید به دادههای سطر با استفاده از این برچسبهای معنیدار دسترسی پیدا کنید، به عنوان مثال، با df_with_index.loc['Tokyo'].
کنترل انواع داده (`dtype`)
پانداس در استنتاج انواع داده (مثلاً تشخیص اعداد، متن و مقادیر بولی) بسیار خوب عمل میکند. با این حال، گاهی اوقات برای اطمینان از کارایی حافظه یا فعالسازی عملیات خاص، نیاز دارید که یک نوع داده مشخص را برای یک ستون اعمال کنید. پارامتر `dtype` این کنترل را به شما میدهد.
مثال: تصور کنید شناسههای محصولی داریم که شبیه اعداد هستند اما باید به عنوان متن (رشته) در نظر گرفته شوند.
data = {
'ProductID': [101, 102, 103],
'Stock': [50, 75, 0]
}
# DataFrame را با تعیین یک dtype برای 'ProductID' ایجاد کنید
df_types = pd.DataFrame(data, dtype={'ProductID': str, 'Stock': 'int32'})
print(df_types.dtypes)
خروجی:
ProductID object Stock int32 dtype: object
توجه داشته باشید که `str` در Pandas به عنوان `object` نمایش داده میشود. با تنظیم صریح `dtype`، از رفتار Pandas با `ProductID` به عنوان یک عدد جلوگیری میکنیم، که ممکن است منجر به محاسبات نادرست یا مشکلات مرتبسازی در آینده شود. استفاده از انواع صحیح خاصتر مانند `int32` به جای `int64` پیشفرض نیز میتواند در مجموعه دادههای بزرگ، حافظه قابل توجهی را ذخیره کند.
سناریوهای عملی و بهترین شیوهها
انتخاب روش صحیح ایجاد به فرمت اصلی دادههای شما بستگی دارد. در اینجا یک راهنمای تصمیمگیری ساده آورده شده است:
- آیا دادههای شما در ستونها (مثلاً یک لیست برای هر ویژگی) قرار دارند؟ از یک دیکشنری از لیستها استفاده کنید. این یک تطابق طبیعی است.
- آیا دادههای شما مجموعهای از رکوردها (مثلاً از یک JSON API) هستند؟ از یک لیست از دیکشنریها استفاده کنید. این روش در مدیریت فیلدهای از دست رفته یا اضافی در رکوردها عالی عمل میکند.
- آیا دادههای شما عددی و در یک شبکه (مثلاً از یک محاسبه علمی) هستند؟ از یک آرایه NumPy استفاده کنید. این کارآمدترین گزینه برای این مورد استفاده است.
- آیا دادههای شما در یک فرمت جدولی ساده سطر به سطر بدون سربرگ هستند؟ از یک لیست از لیستها استفاده کنید و نام ستونها را جداگانه ارائه دهید.
اشتباهات رایج برای اجتناب
- طولهای نابرابر در دیکشنری لیستها: این یک خطای رایج است. هنگام ایجاد DataFrame از یک دیکشنری از لیستها، هر لیست باید دقیقاً تعداد عناصر یکسانی داشته باشد. در غیر این صورت، Pandas یک `ValueError` ایجاد میکند. همیشه اطمینان حاصل کنید که دادههای ستون شما قبل از ایجاد دارای طول یکسان هستند.
- نادیده گرفتن ایندکس: اتکا به ایندکس پیشفرض 0-مبتنی برای بسیاری از موارد خوب است، اما اگر دادههای شما یک شناسه طبیعی (مانند شناسه محصول، شناسه کاربر یا یک مهر زمانی خاص) دارند، تنظیم آن به عنوان ایندکس از ابتدا میتواند کد شما را در ادامه سادهتر کند.
- فراموش کردن انواع داده: اجازه دادن به Pandas برای استنتاج انواع داده بیشتر اوقات کار میکند، اما برای مجموعه دادههای بزرگ یا ستونهایی با انواع مختلط، عملکرد ممکن است کاهش یابد. در مورد تنظیم `dtype` برای ستونهایی که باید به عنوان دستهبندیها، رشتهها یا انواع عددی خاصی در نظر گرفته شوند، فعال باشید تا در حافظه صرفهجویی کنید و از بروز خطا جلوگیری کنید.
فراتر از راهاندازی: ایجاد DataFrame از فایلها
در حالی که این راهنما بر ایجاد DataFrame از اشیاء پایتون در حافظه تمرکز دارد، بسیار مهم است که بدانید در اکثر سناریوهای واقعی، دادههای شما از یک فایل خارجی خواهند آمد. Pandas مجموعهای از توابع خواننده بسیار بهینه شده را برای این منظور ارائه میدهد، از جمله:
pd.read_csv(): برای فایلهای با مقادیر جدا شده با کاما، ابزار اصلی واردات داده.pd.read_excel(): برای خواندن دادهها از صفحات گسترده مایکروسافت اکسل.pd.read_json(): برای خواندن دادهها از فایلها یا رشتههای JSON.pd.read_sql(): برای خواندن نتایج یک کوئری پایگاه داده مستقیماً در یک DataFrame.pd.read_parquet(): برای خواندن از فرمت فایل Parquet کارآمد و ستونی.
این توابع قدم منطقی بعدی در مسیر یادگیری Pandas شما هستند. تسلط بر آنها به شما امکان میدهد دادهها را از تقریباً هر منبعی به یک ساختار DataFrame قدرتمند وارد کنید.
نتیجهگیری: پایه و اساس شما برای تسلط بر داده
Pandas DataFrame ساختار داده مرکزی برای هر کار جدی با دادهها در پایتون است. همانطور که دیدیم، Pandas مجموعهای انعطافپذیر و بصری از ابزارها را برای راهاندازی این ساختارها از فرمتهای مختلف ارائه میدهد. با درک نحوه ایجاد یک DataFrame از دیکشنریها، لیستها و آرایههای NumPy، شما یک پایه محکم برای پروژههای تحلیل داده خود بنا کردهاید.
نکته کلیدی این است که روشی را انتخاب کنید که بهترین تطابق را با ساختار اصلی دادههای شما داشته باشد. این کار نه تنها کد شما را تمیزتر و خواناتر میکند بلکه کارآمدتر نیز خواهد بود. از اینجا، شما آمادهاید تا به وظایف هیجانانگیز پاکسازی، کاوش، تبدیل و تجسم دادهها بپردازید. برنامهنویسی با موفقیت!