إطار البيانات هو بنية بيانات ثنائية الأبعاد غير قابلة للتغيير وغير متجانسة بشكل عام. يحتوي على محاور مُسمَّاة – صفوف وأعمدة. يتألف إطار بيانات Pandas من ثلاثة أجزاء: البيانات والصفوف والأعمدة.
دعنا ننشئ إطار بيانات. سنستخدم إطار البيانات التالي في جميع أنحاء المقالة.
import pandas as pd
df = pd.DataFrame(
[
(5, 10, 15, 20, 'x'),
(1, 2, 3, 4, 'y'),
(40, 50, 60, 70, 'z'),
],
columns = ['A', 'B', 'C', 'D', 'E'],
)
print(df)
A B C D E
0 5 10 15 20 x
1 1 2 3 4 y
2 40 50 60 70 z
الآن بعد أن قمنا بإنشاء إطار بيانات Pandas بنجاح، فلننتقل إلى الأساليب المختلفة التي ستوضح كيفية تحديد الصفوف من إطار البيانات استنادًا إلى قيم الأعمدة.
ملاحظة: لقد حددنا العديد من السيناريوهات لمناقشة كيفية تحديد الصفوف استنادًا إلى مجموعة متنوعة من شروط الأعمدة. يرجى المتابعة.
السيناريو 1: تحديد الصفوف التي تحتوي على قيم أعمدة تساوي سلسلة أو عددية
عندما تكون قيمة العمود مساوية لقيمة قياسية أو سلسلة، يمكننا استخدام السمة
loc()
لتحديد الصفوف التي تساوي قيمة محددة فقط في عمود معين.
المثال 1: في الكود التالي، سوف نختار فقط تلك الصفوف التي تحتوي على قيمة محددة في عمود معين.
import pandas as pd
df = pd.DataFrame(
[
(5, 10, 15, 20, 'x'),
(1, 2, 3, 4, 'y'),
(40, 50, 60, 70, 'z'),
],
columns=['A', 'B', 'C', 'D', 'E'],
)
print(df)
print("Row with value 'z':")
val = df.loc[df['E'].str.contains('z')]
print(val)
A B C D E
0 5 10 15 20 x
1 1 2 3 4 y
2 40 50 60 70 z
Row with value 'z':
A B C D E
2 40 50 60 70 z
المناقشة: في المثال أعلاه، مكنتنا loc() من تحديد الصف الذي يحتوي العمود E فيه على القيمة Z الموجودة في الصف فقط بمساعدة التابع str.contains()
.
المثال 2: في المثال التالي سوف نستخدم عامل ==
لتحديد الصفوف التي تكون فيها قيمة العمود مساوية لعدد قياسي.
import pandas as pd
df = pd.DataFrame(
[
(5, 10, 15, 20, 'x'),
(1, 2, 3, 4, 'y'),
(40, 50, 60, 70, 'z'),
],
columns=['A', 'B', 'C', 'D', 'E'],
)
print(df)
print("Row with value '3':")
val = df.loc[df['C'] == 3]
print(val)
A B C D E
0 5 10 15 20 x
1 1 2 3 4 y
2 40 50 60 70 z
Row with value '3':
A B C D E
1 1 2 3 4 y
يمكننا أيضًا توفير الشرط المنطقي أثناء فهرسة إطارات البيانات هذه وبالتالي حذف سمة loc
بأكملها. انظر إلى المثال التالي:
import pandas as pd
df = pd.DataFrame(
[
(5, 10, 15, 20, 'x'),
(1, 2, 3, 4, 'y'),
(40, 50, 60, 70, 'z'),
],
columns=['A', 'B', 'C', 'D', 'E'],
)
print(df)
print("Row with value '50':")
print(df[df['B'] == 50])
الناتج:
A B C D E
0 5 10 15 20 x
1 1 2 3 4 y
2 40 50 60 70 z
Row with value '50':
A B C D E
2 40 50 60 70 z
ملاحظة: بدلاً من استخدام df['B']
، يمكن أيضًا الرجوع إلى العمود B
باستخدام df.B
.
import pandas as pd
df = pd.DataFrame(
[
(5, 10, 15, 20, 'x'),
(1, 2, 3, 4, 'y'),
(40, 50, 60, 70, 'z'),
],
columns=['A', 'B', 'C', 'D', 'E'],
)
print(df)
print("Row with value '4':")
mask = df.B == 50
print(df[mask])
الناتج:
A B C D E
0 5 10 15 20 x
1 1 2 3 4 y
2 40 50 60 70 z
Row with value '4':
A B C D E
2 40 50 60 70 z
بشكل عام، يقوم المبرمجون بتسمية وتخزين مثل هذه الشروط المنطقية في متغير يسمى mask
والذي يمكن بعد ذلك تمريره إلى DataFrame
أثناء فهرسته. ومع ذلك، يُنصح باستخدام سمة loc()
عند تحديد الصفوف حيث تكون قيمة العمود مساوية لقيمة عددية أو سلسلة. يعد استخدام التابع loc()
نهجًا أسرع كما سيتم تقييم df[mask]
في النهاية على أنه df.loc[mask]
. وبالتالي، فإن استخدام loc
مباشرةً يوفر الوقت.
السيناريو 2: عندما لا تكون قيمة العمود مساوية لقيمة قياسية
يتعين علينا استخدام عامل not (!
) عندما نحتاج إلى تحديد صف حيث لا تكون قيمة العمود مساوية للقيمة القياسية.
مثال: في المثال التالي سوف نقوم باختيار الصفوف حيث قيمة العمود لا تساوي 1.
import pandas as pd
df = pd.DataFrame(
[
(5, 10, 15, 20, 'x'),
(1, 2, 3, 4, 'y'),
(40, 50, 60, 70, 'z'),
],
columns=['A', 'B', 'C', 'D', 'E'],
)
print(df)
print("Rows without the value '1':")
val = df.loc[df['A'] != 1]
print(val)
الناتج:
A B C D E
0 5 10 15 20 x
1 1 2 3 4 y
2 40 50 60 70 z
Rows without the value '1':
A B C D E
0 5 10 15 20 x
2 40 50 60 70 z
السيناريو 3: حذف الصفوف التي تحتوي على قيم العمود “None“
يمكننا استخدام التابع df.dropna()
لإسقاط جميع الصفوف التي تحتوي على قيم أعمدة تساوي None
.
import pandas as pd
df = pd.DataFrame(
[
(5, 10, 15, 20, 'x'),
(None, 75, 85, 95, 'a'),
(1, 2, 3, 4, 'y'),
(40, 50, 60, 70, 'z'),
],
columns=['A', 'B', 'C', 'D', 'E'],
)
print(df)
print("Rows without None values:")
print(df.dropna())
الناتج:
A B C D E
0 5.0 10 15 20 x
1 NaN 75 85 95 a
2 1.0 2 3 4 y
3 40.0 50 60 70 z
Rows without None values:
A B C D E
0 5.0 10 15 20 x
2 1.0 2 3 4 y
3 40.0 50 60 70 z
السيناريو 4: تحديد الصفوف ذات شروط الأعمدة المتعددة
لتحديد الصفوف بناءً على شروط الأعمدة المتعددة، يتعين علينا استخدام عاملي <=
و>=
. ونظرًا لقواعد أولوية عامل Python، تأكد دائمًا من استخدام الأقواس لكل تعبير شرطي.
import pandas as pd
df = pd.DataFrame(
[
(5, 10, 15, 20, 'x'),
(1, 2, 3, 4, 'y'),
(40, 50, 60, 70, 'z'),
],
columns=['A', 'B', 'C', 'D', 'E'],
)
print(df)
val = df.loc[(df['C'] >= 59) & (df['D'] <= 72)]
print(val)
الناتج:
A B C D E
0 5 10 15 20 x
1 1 2 3 4 y
2 40 50 60 70 z
A B C D E
2 40 50 60 70 z
السيناريو 5: تحديد الصفوف التي تحتوي على قيمة العمود في كائن قابل للتكرار
في المثال التالي سنتعلم كيفية تحديد الصفوف التي تحتوي على قيمة معينة داخل القائمة. لتنفيذ ذلك، عليك فقط استخدام التابع isin()
كما هو موضح في المثال التالي.
مثال: حدد جميع الصفوف حيث يحتوي العمود C على 15 أو 60.
import pandas as pd
df = pd.DataFrame(
[
(5, 10, 15, 20, 'x'),
(1, 2, 3, 4, 'y'),
(40, 50, 60, 70, 'z'),
],
columns=['A', 'B', 'C', 'D', 'E'],
)
print(df.loc[df['C'].isin([15, 60])])
الناتج:
A B C D E
0 5 10 15 20 x
2 40 50 60 70 z
في هذه المقالة، تعلمنا طرقًا مختلفة لتحديد الصفوف من إطار بيانات استنادًا إلى قيم الأعمدة. آمل أن تكون هذه المقالة قد ساعدتك. يرجى البقاء على اطلاع والاشتراك للحصول على المزيد من هذه المقالات.
ليست هناك تعليقات:
إرسال تعليق