كيفية استخدام pandas dropna() في Python لإسقاط قيم NA من DataFrame

المقدمة

في هذا البرنامج التعليمي، ستتعلم كيفية استخدام وظيفة DataFrame dropna() في pandas.

قيم NA هي “غير متوفرة”. يمكن أن ينطبق ذلك على Null، None، pandas.NaT، أو numpy.nan. باستخدام dropna() ستقوم بإسقاط الصفوف والأعمدة التي تحتوي على هذه القيم. يمكن أن يكون ذلك مفيدًا لتوفير بيانات صالحة فقط.

بشكل افتراضي، تعيد هذه الوظيفة DataFrame جديدة ويظل DataFrame المصدر دون تغيير.

تم التحقق من صحة هذا البرنامج التعليمي باستخدام Python 3.10.9، pandas 1.5.2، و NumPy 1.24.1.

الصيغة

dropna() تأخذ المعلمات التالية:

dropna(self, axis=0, how="any", thresh=None, subset=None, inplace=False)
  • axis: {0 (أو 'index')، 1 (أو 'columns')}، الافتراضي 0
  • إذا كان 0، قم بإسقاط الصفوف التي تحتوي على قيم مفقودة.
  • إذا كان 1، قم بإسقاط الأعمدة التي تحتوي على قيم مفقودة.
  • how: {'any'، 'all'}، الافتراضي 'any'
  • إذا كانت 'any'، قم بإسقاط الصف أو العمود إذا كانت أي من القيم NA.
  • إذا كانت 'all'، قم بإسقاط الصف أو العمود إذا كانت كل القيم NA.
  • thresh: (اختياري) قيمة int لتحديد الحد الأدنى لعملية الإسقاط.
  • subset: (اختياري) تسمية العمود أو متسلسلة من التسميات لتحديد الصفوف أو الأعمدة.
  • inplace: (اختياري) قيمة bool.
  • إذا كانت True، يتم تغيير إطار البيانات المصدر ويتم إرجاع None.

بناء إطارات بيانات عينية

بناء إطار بيانات عيني يحتوي على قيم صالحة وغير صالحة:

dropnaExample.py
import pandas as pd
import numpy as np

d1 = {
'Name': ['Shark', 'Whale', 'Jellyfish', 'Starfish'],
'ID': [1, 2, 3, 4],
'Population': [100, 200, np.nan, pd.NaT],
'Regions': [1, None, pd.NaT, pd.NaT]
}

df1 = pd.DataFrame(d1)
print(df1)

سيقوم هذا الكود بطباعة إطار البيانات:

Output
Name ID Population Regions 0 Shark 1 100 1 1 Whale 2 200 None 2 Jellyfish 3 NaN NaT 3 Starfish 4 NaT NaT

ثم قم بإضافة إطار بيانات ثاني يحتوي على صفوف وأعمدة إضافية بقيم NA:

d2 = {
'Name': ['Shark', 'Whale', 'Jellyfish', 'Starfish', pd.NaT],
'ID': [1, 2, 3, 4, pd.NaT],
'Population': [100, 200, np.nan, pd.NaT, pd.NaT],
'Regions': [1, None, pd.NaT, pd.NaT, pd.NaT],
'Endangered': [pd.NaT, pd.NaT, pd.NaT, pd.NaT, pd.NaT]
}

df2 = pd.DataFrame(d2)
print(df2)

سينتج هذا إطار بيانات جديد:

Output
Name ID Population Regions Endangered 0 Shark 1 100 1 NaT 1 Whale 2 200 None NaT 2 Jellyfish 3 NaN NaT NaT 3 Starfish 4 NaT NaT NaT 4 NaT NaT NaT NaT NaT

ستستخدم الإطارات السابقة في الأمثلة التالية.

إسقاط جميع الصفوف ذات القيم المفقودة

استخدم dropna() لإزالة الصفوف التي تحتوي على أي قيم None، NaN، أو NaT:

dropnaExample.py
dfresult = df1.dropna()
print(dfresult)

سينتج هذا:

Output
Name ID Population Regions 0 Shark 1 100 1

A new DataFrame with a single row that didn’t contain any NA values.

إسقاط جميع الأعمدة التي تحتوي على قيم مفقودة

استخدم dropna() مع axis=1 لإزالة الأعمدة التي تحتوي على أي قيم None، NaN، أو NaT:

dfresult = df1.dropna(axis=1)
print(dfresult)

سيتم إسقاط الأعمدة التي تحتوي على أي قيم None، NaN، أو NaT:

Output
Name ID 0 Shark 1 1 Whale 2 2 Jellyfish 3 3 Starfish 4

A new DataFrame with a single column that contained non-NA values.

إسقاط الصفوف أو الأعمدة إذا كانت جميع القيم هي Null باستخدام how

استخدم الإطار البياني الثاني و how:

dropnaExample.py
dfresult = df2.dropna(how='all')
print(dfresult)

سيتم إسقاط الصفوف التي تحتوي على جميع القيم المساوية لـ NA:

Output
Name ID Population Regions Endangered 0 Shark 1 100 1 NaT 1 Whale 2 200 None NaT 2 Jellyfish 3 NaN NaT NaT 3 Starfish 4 NaT NaT NaT

تم إسقاط الصف الخامس.

بعد ذلك، استخدم how وحدد axis:

dropnaExample.py
dfresult = df2.dropna(how='all', axis=1)
print(dfresult)

سيتم إسقاط الأعمدة التي تحتوي على جميع القيم المساوية لـ NA:

Output
Name ID Population Regions 0 Shark 1 100 1 1 Whale 2 200 None 2 Jellyfish 3 NaN NaT 3 Starfish 4 NaT NaT 4 NaT NaT NaT NaT

تم إسقاط العمود الخامس.

إسقاط الصفوف أو الأعمدة إذا تم تجاوز عتبة مع thresh

استخدم الإطار الثاني مع thresh لإسقاط الصفوف التي لا تفي بعتبة الحد الأدنى من القيم غير NA وهي على الأقل 3 قيمة:

dropnaExample.py
dfresult = df2.dropna(thresh=3)
print(dfresult)

سيتم إسقاط الصفوف التي لا تحتوي على 3 قيم غير NA على الأقل:

Output
Name ID Population Regions Endangered 0 Shark 1 100 1 NaT 1 Whale 2 200 None NaT

تم إسقاط الصفوف الثالثة والرابعة والخامسة.

إسقاط الصفوف أو الأعمدة لمجموعات فرعية محددة subsets

استخدم الإطار الثاني مع subset لإسقاط الصفوف التي تحتوي على قيم NA في عمود Population:

dropnaExample.py
dfresult = df2.dropna(subset=['Population'])
print(dfresult)

سيتم إسقاط الصفوف التي تحتوي على قيم NA في عمود Population:

Output
Name ID Population Regions Endangered 0 Shark 1 100 1 NaT 1 Whale 2 200 None NaT

تم إسقاط الصفوف الثالثة والرابعة والخامسة.

يمكنك أيضًا تحديد قيم index في subset عند إسقاط الأعمدة من إطار البيانات:

dropnaExample.py
dfresult = df2.dropna(subset=[1, 2], axis=1)
print(dfresult)

الأعمدة التي تحتوي على قيم NA في فرعي الصفوف 1 و 2:

Output
Name ID 0 Shark 1 1 Whale 2 2 Jellyfish 3 3 Starfish 4 4 NaT NaT

تم إسقاط الأعمدة الثالثة والرابعة والخامسة.

تغيير إطار البيانات المصدر بعد إسقاط الصفوف أو الأعمدة باستخدام inplace

بشكل افتراضي، dropna() لا يعدل إطار البيانات المصدر. ومع ذلك، في بعض الحالات، قد ترغب في توفير الذاكرة عند العمل مع إطار بيانات مصدر كبير باستخدام inplace.

dropnaExample.py
df1.dropna(inplace=True)
print(df1)

هذا الكود لا يستخدم متغير dfresult.

سينتج هذا:

Output
Name ID Population Regions 0 Shark 1 100 1

تم تعديل الإطار البيانات المصدري.

الاستنتاج

في هذه المقالة، استخدمت وظيفة dropna() لإزالة الصفوف والأعمدة التي تحتوي على قيم NA.

واصل تعلمك مع المزيد من دروس Python وpandas – دليل وحدة Python pandas، إسقاط الصفوف المكررة في pandas.

المراجع

Source:
https://www.digitalocean.com/community/tutorials/pandas-dropna-drop-null-na-values-from-dataframe