Python برنامج تعليمي لـ Pandas: DataFrame، نطاق التاريخ والاستخدام
⚡ ملخص ذكي
بانداز هي مكتبة مفتوحة المصدر Python مكتبة لمعالجة البيانات الجدولية. توفر هذه المكتبة هياكل السلاسل وإطارات البيانات، ونطاقات التواريخ، وأدوات المساعدة في الفحص، وعمليات التقطيع والحذف والدمج والفرز وإعادة التسمية الموضحة خلال هذا الشرح.
ما هي مكتبة Pandas؟ Python?
الباندا هي مكتبة مفتوحة المصدر تتيح لك إجراء عمليات معالجة البيانات وتحليلها في Pythonيغطي هذا البرنامج الجداول الرقمية والسلاسل الزمنية على حد سواء. فهو يوفر طريقة سهلة لإنشاء البيانات ومعالجتها وإدارتها، وهو مبني على أساس نمبايلذلك يجب أن يكون NumPy موجودًا لكي تعمل Pandas.
لماذا استخدام الباندا؟
يستفيد علماء البيانات من الباندا في Python للحصول على المزايا التالية:
- يتعامل بسهولة مع البيانات المفقودة
- يستخدم هذا النظام السلاسل للبيانات أحادية البعد، وإطارات البيانات للبيانات متعددة الأبعاد.
- يوفر طريقة فعالة لتقسيم البيانات
- فهو يوفر طريقة مرنة لدمج البيانات أو تسلسلها أو إعادة تشكيلها
- يتضمن مجموعة أدوات قوية لسلاسل البيانات الزمنية
باختصار، توفر مكتبة Pandas هياكل بيانات قوية وسهلة الاستخدام، بالإضافة إلى وسائل للعمل عليها بسرعة، وهذا هو السبب في أنها تُعتبر أساسًا لمعظم التطبيقات. Python تحليل البيانات عمل.
كيفية تثبيت الباندا
تأتي مكتبة Pandas مُدمجة مع Anaconda ومعظم خدمات دفاتر الملاحظات المُدارة، لذا فهي عادةً ما تكون مُثبتة مُسبقًا. في حال فشل الاستيراد، يُمكنك استخدام أحد الأوامر التالية لإضافتها. البيئة المُنشأة في كيفية تثبيت TensorFlow يحتوي أيضًا على مكتبة باندا.
- pip:
pip install pandas - أناكوندا:
conda install -c anaconda pandas - داخل Jupyter دفتر الجوال:
import sys !conda install --yes --prefix {sys.prefix} pandas
ما هو إطار بيانات الباندا؟
إطار بيانات Pandas هو بنية بيانات ثنائية الأبعاد مُصنّفة، وقد تحتوي أعمدتها على أنواع بيانات مختلفة. وهو الطريقة القياسية لتخزين البيانات في شكل جدولي: حيث تحتوي الصفوف على الملاحظات، بينما تحتوي الأعمدة على أسماء المعلومات. على سبيل المثال، السعر يمكن أن يكون اسم عمود، ويمكن أن تكون 2 و3 و4 قيم الأسعار.
تُعدّ جداول البيانات معروفة جيداً لدى الإحصائيين وغيرهم من ممارسي البيانات. تُظهر الصورة أدناه هذا الشكل - فهرس صفوف مُصنّف على الجانب وأعمدة مُسمّاة في الأعلى.
ما هي السلسلة؟
السلسلة هي بنية بيانات أحادية البعد. يمكنها استيعاب أي نوع من البيانات، مثل الأعداد الصحيحة أو العشرية أو السلاسل النصية، وهي مفيدة عند الرغبة في إجراء عملية حسابية أو إرجاع مصفوفة أحادية البعد. لا يمكن للسلسلة، بحكم تعريفها، أن تحتوي على أعمدة متعددة؛ في هذه الحالة، استخدم بنية DataFrame.
يأخذ مُنشئ سلسلة Pandas المعاملات التالية:
- تاريخ: يمكن أن تكون قائمة أو قاموسًا أو قيمة عددية
pd.Series([1., 2., 3.])
0 1.0 1 2.0 2 3.0 dtype: float64
يمكنك إضافة فهرس باستخدام index. يقوم بتسمية الصفوف، ويجب أن يساوي طوله حجم العمود.
pd.Series([1., 2., 3.], index=['a', 'b', 'c'])
فيما يلي، تقوم بإنشاء سلسلة بيانات Pandas تحتوي على قيمة مفقودة في الصف الثالث. القيم المفقودة في Python يتم عرضها على النحو التالي: NaNو np.nan يقوم برنامج NumPy بإنشاء واحد بشكل مصطنع.
pd.Series([1,2,np.nan])
الناتج
0 1.0 1 2.0 2 NaN dtype: float64
إنشاء إطار بيانات الباندا
يمكنك تحويل مصفوفة NumPy إلى DataFrame باستخدام pd.DataFrame()والعكس ممكن أيضاً: لتحويل DataFrame مرة أخرى إلى مصفوفة، استخدم np.array() أو df.to_numpy()وهو ما توصي به وثائق Pandas الحالية.
## Numpy to pandas import numpy as np h = [[1,2],[3,4]] df_h = pd.DataFrame(h) print('Data Frame:', df_h) ## Pandas to numpy df_h_n = np.array(df_h) print('Numpy array:', df_h_n) Data Frame: 0 1 0 1 2 1 3 4 Numpy array: [[1 2] [3 4]]
يُعد القاموس مدخلاً فعالاً بنفس القدر لـ pd.DataFrame().
dic = {'Name': ["John", "Smith"], 'Age': [30, 40]}
pd.DataFrame(data=dic)
| العمر | الاسم | |
|---|---|---|
| 0 | 30 | جون |
| 1 | 40 | سميث |
بيانات نطاق الباندا
توفر مكتبة Pandas واجهة برمجة تطبيقات (API) سهلة الاستخدام لإنشاء نطاق من التواريخ، والذي يصبح فهرسًا لسلسلة زمنية. ويكون الاستدعاء على النحو التالي:
pd.date_range(start, periods, freq):
- المعلمة الأولى هي تاريخ البدء
- المعلمة الثانية هي عدد الفترات (اختياري إذا تم تحديد تاريخ الانتهاء)
- المعيار الأخير هو التكرار: يوم
D، شهرMو سنةY
## Create date # Days dates_d = pd.date_range('20300101', periods=6, freq='D') print('Day:', dates_d)
الناتج
Day: DatetimeIndex(['2030-01-01', '2030-01-02', '2030-01-03', '2030-01-04', '2030-01-05', '2030-01-06'], dtype='datetime64[ns]', freq='D')
# Months dates_m = pd.date_range('20300101', periods=6, freq='M') print('Month:', dates_m)
الناتج
Month: DatetimeIndex(['2030-01-31', '2030-02-28', '2030-03-31', '2030-04-30','2030-05-31', '2030-06-30'], dtype='datetime64[ns]', freq='M')
ملاحظة حول الإصدار: اسم الشهر المستعار M تم إيقاف استخدام الطريقة المذكورة أعلاه في Pandas 2.2 وإزالتها في Pandas 3.0. في الإصدارات الحالية، استخدم freq='ME' بالنسبة لنهاية الشهر؛ يكون المؤشر الناتج متطابقًا.
فحص البيانات
يمكنك التحقق من بداية أو نهاية مجموعة البيانات باستخدام head() or tail() يتم استدعاء DataFrame، كما يوضح مثال Pandas أدناه.
الخطوة 1) أنشئ سلسلة عشوائية باستخدام NumPy. تحتوي السلسلة على 4 أعمدة و 6 صفوف.
random = np.random.randn(6,4)
الخطوة 2) ثم تقوم بإنشاء DataFrame باستخدام Pandas.
استعمل dates_m كمؤشر، لذلك يُعطى كل صف اسمًا يتوافق مع تاريخ، وتُسمى الأعمدة الأربعة بـ columns جدال.
# Create data with date df = pd.DataFrame(random, index=dates_m, columns=list('ABCD'))
لأن np.random.randn() إذا لم يتم إدخال بيانات أولية، فستختلف الأرقام التي تحصل عليها عن تلك المطبوعة هنا. اتصل بنا. np.random.seed(0) أولاً، إذا كنت ترغب في إعادة إنتاج مجموعة ثابتة.
الخطوة 3) استخدام دالة الرأس
df.head(3)
| A | B | C | D | |
|---|---|---|---|---|
| 2030-01-31 | 1.139433 | 1.318510 | -0.181334 | 1.615822 |
| 2030-02-28 | -0.081995 | -0.063582 | 0.857751 | -0.527374 |
| 2030-03-31 | -0.519179 | 0.080984 | -1.454334 | 1.314947 |
الخطوة 4) استخدام دالة الذيل
df.tail(3)
| A | B | C | D | |
|---|---|---|---|---|
| 2030-04-30 | -0.685448 | -0.011736 | 0.622172 | 0.104993 |
| 2030-05-31 | -0.935888 | -0.731787 | -0.558729 | 0.768774 |
| 2030-06-30 | 1.096981 | 0.949180 | -0.196901 | -0.471556 |
الخطوة 5) إحدى الطرق الممتازة للحصول على فكرة عن البيانات هي describe(). يعرض التقرير عدد البيانات، والمتوسط، والانحراف المعياري، والحد الأدنى، والحد الأقصى، والنسب المئوية لمجموعة البيانات.
df.describe()
| A | B | C | D | |
|---|---|---|---|---|
| عد | 6.000000 | 6.000000 | 6.000000 | 6.000000 |
| تعني | 0.002317 | 0.256928 | -0.151896 | 0.467601 |
| الأمراض المنقولة جنسيا | 0.908145 | 0.746939 | 0.834664 | 0.908910 |
| دقيقة | -0.935888 | -0.731787 | -1.454334 | -0.527374 |
| 25% | -0.643880 | -0.050621 | -0.468272 | -0.327419 |
| 50% | -0.300587 | 0.034624 | -0.189118 | 0.436883 |
| 75% | 0.802237 | 0.732131 | 0.421296 | 1.178404 |
| ماكس | 1.139433 | 1.318510 | 0.857751 | 1.615822 |
بيانات الشريحة
تتيح لك خاصية التقطيع استخراج مجموعة فرعية من الصفوف أو الأعمدة من إطار البيانات. يمكنك استخدام اسم العمود لاستخراج البيانات.tracفي عمود واحد، كما يوضح مثال Pandas أدناه.
## Slice ### Using name df['A'] 2030-01-31 -0.168655 2030-02-28 0.689585 2030-03-31 0.767534 2030-04-30 0.557299 2030-05-31 -1.547836 2030-06-30 0.511551 Freq: M, Name: A, dtype: float64
لتحديد أعمدة متعددة، تحتاج إلى قوس مزدوج. [[..,..]]يشير الزوج الأول إلى أنك تريد تحديد الأعمدة؛ ويحدد الزوج الثاني الأعمدة التي سيتم إرجاعها.
df[['A', 'B']]
| A | B | |
|---|---|---|
| 2030-01-31 | -0.168655 | 0.587590 |
| 2030-02-28 | 0.689585 | 0.998266 |
| 2030-03-31 | 0.767534 | -0.940617 |
| 2030-04-30 | 0.557299 | 0.507350 |
| 2030-05-31 | -1.547836 | 1.276558 |
| 2030-06-30 | 0.511551 | 1.572085 |
يمكنك تقسيم الصفوف باستخدام النقطتين الرأسيتين. الكود أدناه يُعيد الصفوف الثلاثة الأولى.
### using a slice for row
df[0:3]
| A | B | C | D | |
|---|---|---|---|---|
| 2030-01-31 | -0.168655 | 0.587590 | 0.572301 | -0.031827 |
| 2030-02-28 | 0.689585 | 0.998266 | 1.164690 | 0.475975 |
| 2030-03-31 | 0.767534 | -0.940617 | 0.227255 | -0.341532 |
استخدم loc يُحدد المُستخدِم الأعمدة بالاسم. وكما هو معتاد، تُمثل القيمة قبل الفاصلة الصفوف، والقيمة التي تليها الأعمدة، وتُستخدم الأقواس لتحديد أكثر من عمود واحد.
## Multi col df.loc[:,['A','B']]
| A | B | |
|---|---|---|
| 2030-01-31 | -0.168655 | 0.587590 |
| 2030-02-28 | 0.689585 | 0.998266 |
| 2030-03-31 | 0.767534 | -0.940617 |
| 2030-04-30 | 0.557299 | 0.507350 |
| 2030-05-31 | -1.547836 | 1.276558 |
| 2030-06-30 | 0.511551 | 1.572085 |
هناك طريقة أخرى لتحديد صفوف وأعمدة متعددة. iloc[] يستخدم مواضع الأعداد الصحيحة بدلاً من أسماء الأعمدة، لذا فإن الكود أدناه يُرجع نفس DataFrame كما هو موضح أعلاه.
df.iloc[:, :2]
| A | B | |
|---|---|---|
| 2030-01-31 | -0.168655 | 0.587590 |
| 2030-02-28 | 0.689585 | 0.998266 |
| 2030-03-31 | 0.767534 | -0.940617 |
| 2030-04-30 | 0.557299 | 0.507350 |
| 2030-05-31 | -1.547836 | 1.276558 |
| 2030-06-30 | 0.511551 | 1.572085 |
إسقاط عمود
يمكنك حذف الأعمدة باستخدام df.drop()، مع تمرير الأسماء في columns جدال.
df.drop(columns=['A', 'C'])
| B | D | |
|---|---|---|
| 2030-01-31 | 0.587590 | -0.031827 |
| 2030-02-28 | 0.998266 | 0.475975 |
| 2030-03-31 | -0.940617 | -0.341532 |
| 2030-04-30 | 0.507350 | -0.296035 |
| 2030-05-31 | 1.276558 | 0.523017 |
| 2030-06-30 | 1.572085 | -0.594772 |
سلسلة
يمكنك دمج إطارين من البيانات باستخدام pd.concat()قم أولاً بإنشاء الإطارين.
import numpy as np df1 = pd.DataFrame({'name': ['John', 'Smith','Paul'], 'Age': ['25', '30', '50']}, index=[0, 1, 2]) df2 = pd.DataFrame({'name': ['Adam', 'Smith' ], 'Age': ['26', '11']}, index=[3, 4])
ثم قم بدمجها.
df_concat = pd.concat([df1,df2]) df_concat
| العمر | الاسم | |
|---|---|---|
| 0 | 25 | جون |
| 1 | 30 | سميث |
| 2 | 50 | بول |
| 3 | 26 | ادم |
| 4 | 11 | سميث |
إسقاط التكرارات
عندما تحتوي مجموعة البيانات على معلومات مكررة، drop_duplicates() هي طريقة سهلة لاستبعاد الصفوف المتكررة. df_concat يحتوي على ملاحظة مكررة: Smith يظهر مرتين في name العمود.
df_concat.drop_duplicates('name')
| العمر | الاسم | |
|---|---|---|
| 0 | 25 | جون |
| 1 | 30 | سميث |
| 2 | 50 | بول |
| 3 | 26 | ادم |
فرز القيم
يمكنك فرز الإطار باستخدام sort_values(). لاحظ أن Age تم إنشاء النص هنا، لذا يتم فرز الصفوف حسب ترتيب السلسلة النصية.
df_concat.sort_values('Age')
| العمر | الاسم | |
|---|---|---|
| 4 | 11 | سميث |
| 0 | 25 | جون |
| 3 | 26 | ادم |
| 1 | 30 | سميث |
| 2 | 50 | بول |
إعادة تسمية الأعمدة
استعمل rename() لإعادة تسمية عمود في Pandas. في كل زوج، القيمة الأولى هي اسم العمود الحالي والثانية هي الاسم الجديد.
df_concat.rename(columns={"name": "Surname", "Age": "Age_ppl"})
| Age_ppl | لقب | |
|---|---|---|
| 0 | 25 | جون |
| 1 | 30 | سميث |
| 2 | 50 | بول |
| 3 | 26 | ادم |
| 4 | 11 | سميث |
دليل سريع لأساليب باندا
يوضح هذا الجدول كل مهمة شائعة وطريقة Pandas التي تقوم بتنفيذها.
| مهمة | الأسلوب |
|---|---|
| بيانات الاستيراد | read_csv |
| إنشاء سلسلة | مسلسلات |
| إنشاء إطار البيانات | DataFrame |
| إنشاء نطاق زمني | DATE_RANGE |
| رأس العودة | رئيس |
| ذيل العودة | ذيل |
| وصف | وصف |
| شريحة باستخدام الاسم | اسم البيانات["اسم العمود"] |
| شريحة باستخدام الصفوف | اسم_البيانات[0:5] |

