Python برنامج تعليمي لـ Pandas: DataFrame، نطاق التاريخ والاستخدام

⚡ ملخص ذكي

بانداز هي مكتبة مفتوحة المصدر Python مكتبة لمعالجة البيانات الجدولية. توفر هذه المكتبة هياكل السلاسل وإطارات البيانات، ونطاقات التواريخ، وأدوات المساعدة في الفحص، وعمليات التقطيع والحذف والدمج والفرز وإعادة التسمية الموضحة خلال هذا الشرح.

  • 🔘 تم البناء على NumPy: تتطلب مكتبة Pandas مكتبة NumPy، التي توفر المصفوفات التي تقف وراء كل سلسلة بيانات وإطار بيانات.
  • ☑️ هيكلان: تخزن السلسلة بُعدًا واحدًا مُصنَّفًا؛ بينما يخزن إطار البيانات صفوفًا وأعمدة من أنواع مختلطة.
  • ✅ نطاقات التواريخ: تقوم الدالة pd.date_range() بإنشاء فهرس من تاريخ البداية وعدد الفترات والتكرار.
  • 🧪 افحص أولاً: تكشف وظائف head() و tail() و describe() عن الشكل والانتشار والنسب المئوية قبل أي تحليل.
  • 🛠️ قطّع بدقة: تحدد أسماء الأقواس الأعمدة، ويحدد loc حسب التسمية، ويحدد iloc حسب الموضع.
  • ⚠️ ملاحظة حول الإصدار: تم إيقاف استخدام الاسم المستعار للتردد M في Pandas 2.2؛ الإصدارات الحالية تتوقع ME.

Python دليل استخدام مكتبة Pandas: DataFrame، ونطاق التاريخ، واستخدام مكتبة Pandas

ما هي مكتبة 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 قيم الأسعار.

تُعدّ جداول البيانات معروفة جيداً لدى الإحصائيين وغيرهم من ممارسي البيانات. تُظهر الصورة أدناه هذا الشكل - فهرس صفوف مُصنّف على الجانب وأعمدة مُسمّاة في الأعلى.

تخطيط إطار بيانات Pandas مع فهرس صف مُصنَّف وأعمدة مُسمَّاة

ما هي السلسلة؟

السلسلة هي بنية بيانات أحادية البعد. يمكنها استيعاب أي نوع من البيانات، مثل الأعداد الصحيحة أو العشرية أو السلاسل النصية، وهي مفيدة عند الرغبة في إجراء عملية حسابية أو إرجاع مصفوفة أحادية البعد. لا يمكن للسلسلة، بحكم تعريفها، أن تحتوي على أعمدة متعددة؛ في هذه الحالة، استخدم بنية 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]

الأسئلة الشائعة

اتصل pd.read_csv () مع مسار أو URLأضف أسماءً لتسمية الأعمدة، واستخدم فاصلة (sep) لفصل مختلف، واستخدم أعمدة (usecols) للاحتفاظ فقط بالأعمدة التي تحتاجها.

تُشير الدالة isnull() إلى القيم المفقودة، بينما تُزيل الدالة dropna() الصفوف أو الأعمدة المتأثرة، وتستبدل الدالة fillna() القيم المفقودة بقيمة ثابتة أو إحصائية مثل متوسط ​​العمود. تُطبع القيم المفقودة كـ NaN.

تقوم الدالة groupby() بتقسيم الصفوف إلى مجموعات حسب عمود رئيسي، وتطبق عملية تجميع مثل العد أو المجموع أو المتوسط ​​على كل مجموعة، ثم تجمع النتائج في إطار جديد.

أنشئ قناعًا منطقيًا ومرره بين قوسين، على سبيل المثال df[df.Age == 30]. اجمع الأقنعة باستخدام عاملي العطف (&) والخط العمودي (|)، ثم قم بتغليفها.ping كل مقارنة بين قوسين.

تقوم الدالة pd.merge() بمطابقة الصفوف بناءً على عمود مفتاحي بالطريقة التي... SQL تقوم الدالة join بتعيين قيمة how إلى inner أو left أو right أو outer. أما الدالة concat() فتقوم بتجميع الإطارات بدلاً من مطابقة المفاتيح.

تقوم الدالة df.to_csv('out.csv', index=False) بكتابة ملف CSV، بينما تقوم الدالة df.to_excel('out.xlsx') بكتابة ورقة عمل. احذفping يتجنب الفهرس وجود عمود أول غير مسمى في القراءة التالية.

تقوم مساعدات الذكاء الاصطناعي بتحليل إطار بيانات جديد، واقتراح استدعاءات الوصف والتجميع والرسم البياني التي تستحق التنفيذ، وتحديد الأعمدة ذات أنواع البيانات الشاذة أو التي تحتوي على العديد من القيم الفارغة. ثم يتم التحقق من كل اقتراح باستخدام البيانات الأولية.

نعم. مساعد الطيار جيثب يُكمل تعليقًا بسيطًا في كود Pandas يعمل في Jupyter خلية - زنزانة. Revتحقق من أنواع البيانات وعدد الصفوف قبل الوثوق بالنتيجة.

تلخيص هذه التدوينة بـ: