Pandas: اختيار البيانات
آخر تحديث: 2026-08-26
يُعدُّ اختيار البيانات العمليّة الأكثر تكرارًا في تحليل البيانات—"أرني البيانات التي تحقّق هذه الشروط." تقدّم Pandas مجموعة غنيّة من أساليب الاختيار: حسب التسمية، حسب الموضع، حسب الشرط، حسب التعبير، وحتى سلاسل الاستعلام المشابهة لـ SQL. يأخذك هذا القسم عبر كل أسلوب اختيار ويساعدك على تجنّب فخّ "فهرسة السلاسل" الأكثر شيوعًا.
1. What You Will Learn
- ❶ loc label selection
- ❷ iloc position selection
- ❸ Conditional filtering (منطقي indexing)
- ❹ The query طريقة
- ❺ isin filtering and the chained indexing pitfall
2. احتياجات تشارلي لتصفية المنتجات
(1) نقطة الألم: الجمع بين شروط متعددة أمر متعب للغاية
يحتاج تشارلي إلى تصفية "منتجات إلكترونية بسعر أكبر من 50 وتقييم أكبر من 4.0" من بين 1000 منتج. قام أولاً بكتابة سلسلة طويلة من الشروط باستخدام الفهرسة المنطقية:
import pandas as pd
df = pd.DataFrame({
'name': ['Laptop', 'Phone', 'Tablet', 'Monitor', 'Keyboard',
'Mouse', 'Headset', 'Speaker', 'Camera', 'Charger'],
'category': ['Electronics', 'Electronics', 'Electronics', 'Electronics',
'Accessories', 'Accessories', 'Accessories', 'Accessories',
'Electronics', 'Accessories'],
'price': [999.99, 699.99, 349.99, 449.99, 79.99,
29.99, 149.99, 89.99, 599.99, 19.99],
'stock': [50, 120, 80, 35, 200, 300, 150, 180, 25, 500],
'rating': [4.7, 4.5, 4.3, 4.6, 4.2, 4.0, 4.4, 4.1, 4.8, 3.9]
})
# الفهرسة المنطقية — تعمل ولكنها مطولة
result = df[(df['price'] > 50) & (df['rating'] > 4.0) & (df['category'] == 'Electronics')]
print(result[['name', 'price', 'rating']])
# name price rating
# 0 Laptop 999.99 4.7
# 1 Phone 699.99 4.5
# 2 Tablet 349.99 4.3
# 3 Monitor 449.99 4.6
# 8 Camera 599.99 4.8
> **المخرجات:** شغّل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston لا يحتوي على مكتبة pandas مثبتة مسبقًا، لذا يرجى تثبيتها على جهازك (`pip install pandas`) واتباع النص. قد تختلف القيم الفعلية قليلاً حسب إصدار pandas.
(2) الحل: طريقة الاستعلام (query) أكثر وضوحًا للقراءة
▶ مثال
> **المخرجات:** شغّل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston لا يحتوي على مكتبة pandas مثبتة مسبقًا، لذا يرجى تثبيتها على جهازك (`pip install pandas`) واتباع النص. قد تختلف القيم الفعلية قليلاً حسب إصدار pandas.
: استعلامات قابلة للقراءة باستخدام query (الصعوبة ⭐⭐)
# نفس النتيجة، أكثر وضوحًا للقراءة بكثير
result = df.query('price > 50 and rating > 4.0 and category == "Electronics"')
print(result[['name', 'price', 'rating']])
# باستخدام متغير
min_price = 50
min_rating = 4.0
result2 = df.query('price > @min_price and rating > @min_rating')
> **المخرجات:** شغّل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston لا يحتوي على مكتبة pandas مثبتة مسبقًا، لذا يرجى تثبيتها على جهازك (`pip install pandas`) واتباع النص. قد تختلف القيم الفعلية قليلاً حسب إصدار pandas.
(3) الفائدة: أربع طرق للاختيار، لكل منها نقاط قوتها
| الطريقة | بنية الجملة | الأفضل لـ |
|---|---|---|
| loc | df.loc[row, col] |
التحديد الدقيق باستخدام العلامات (Labels) |
| iloc | df.iloc[r, c] |
التحديد بناءً على الموضع |
| الفهرسة المنطقية | df[condition] |
الشروط البسيطة |
| query | df.query('expr') |
تصفية شروط متعددة ومعقدة |
3. loc: تحديد بالاسم (Label Selection)
(1) بنية loc (loc Syntax)
df.loc[صف_الاسم، عمود_الاسم] — يحدد بناءً على الاسم؛ والتقطيعات تشمل النقطة النهائية.
▶ مثال
> **المخرجات:** شغّل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston لا يحتوي على pandas مثبتًا مسبقًا، لذا يرجى تثبيته على جهازك (`pip install pandas`) والمتابعة. قد تختلف القيم الفعلية قليلاً اعتمادًا على إصدار pandas.
: تحديد بالاسم باستخدام loc (الصعوبة ⭐)
import pandas as pd
df = pd.DataFrame({
'name': ['Laptop', 'Phone', 'Tablet', 'Monitor', 'Keyboard'],
'price': [999.99, 699.99, 349.99, 449.99, 79.99],
'stock': [50, 120, 80, 35, 200]
}, index=['A001', 'A002', 'A003', 'A004', 'A005'])
# صف واحد حسب الاسم
print(df.loc['A001'])
# name Laptop
# price 999.99
# stock 50
# عدة صفوف
print(df.loc[['A001', 'A003']])
# قطع الصفوف + قطع الأعمدة (بالأسماء، يشمل النقطة النهاية)
print(df.loc['A001':'A003', 'name':'price'])
# name price
# A001 Laptop 999.99
# A002 Phone 699.99
# A003 Tablet 349.99
# صفوف محددة + أعمدة محددة
print(df.loc[['A001', 'A004'], ['name', 'stock']])
> **المخرجات:** شغّل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston لا يحتوي على pandas مثبتًا مسبقًا، لذا يرجى تثبيته على جهازك (`pip install pandas`) والمتابعة. قد تختلف القيم الفعلية قليلاً اعتمادًا على إصدار pandas.
(2) تحديد شرطي باستخدام loc
▶ مثال
> **المخرجات:** شغّل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston لا يحتوي على pandas مثبتًا مسبقًا، لذا يرجى تثبيته على جهازك (`pip install pandas`) والمتابعة. قد تختلف القيم الفعلية قليلاً اعتمادًا على إصدار pandas.
: loc + شرط (الصعوبة ⭐⭐)
import pandas as pd
df = pd.DataFrame({
'name': ['Laptop', 'Phone', 'Tablet', 'Monitor', 'Keyboard'],
'price': [999.99, 699.99, 349.99, 449.99, 79.99],
'stock': [50, 120, 80, 35, 200]
})
# تصفية الصفوف + تحديد الأعمدة في عملية واحدة
expensive = df.loc[df['price'] > 400, ['name', 'price']]
print(expensive)
# name price
# 0 Laptop 999.99
# 1 Phone 699.99
# 3 Monitor 449.99
# مع الإسناد (آمن — بدون تعديد فهرس متسلسل)
df.loc[df['stock'] < 50, 'stock'] = 50 # إعادة تخزين العناصر منخفضة المخزون
> **المخرجات:** شغّل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston لا يحتوي على pandas مثبتًا مسبقًا، لذا يرجى تثبيته على جهازك (`pip install pandas`) والمتابعة. قد تختلف القيم الفعلية قليلاً اعتمادًا على إصدار pandas.
4. iloc: التحديد حسب الموقع
(1) صيغة iloc
df.iloc[row_pos, col_pos] — يحدد الصفوف والأعمدة حسب الموقع العددي (الموضع الصحيح)؛ الشرائح لا تشمل النقطة النهائية (أسلوب بايثون).
▶ مثال
> **الإخراج:** قم بتشغيل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston لا يحتوي على pandas مثبتة مسبقاً، لذا يرجى تثبيتها على جهازك (`pip install pandas`) واتباع الخطوات. القيم الفعلية قد تختلف قليلاً اعتماداً على إصدار pandas.
: تحديد الموضع باستخدام iloc (الصعوبة ⭐)
import pandas as pd
df = pd.DataFrame({
'name': ['Laptop', 'Phone', 'Tablet', 'Monitor', 'Keyboard'],
'price': [999.99, 699.99, 349.99, 449.99, 79.99],
'stock': [50, 120, 80, 35, 200]
})
# صف واحد حسب الموضع
print(df.iloc[0]) # الصف الأول (Laptop)
# عدة صفوف حسب قائمة المواضع
print(df.iloc[[0, 2, 4]])
# شريحة صف + شريحة عمود (مواقع، لا تشمل النقطة النهائية)
print(df.iloc[0:3, 0:2])
# name price
# 0 Laptop 999.99
# 1 Phone 699.99
# 2 Tablet 349.99
# آخر صفّين
print(df.iloc[-2:])
# كل صف ثاني
print(df.iloc[::2])
> **الإخراج:** قم بتشغيل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston لا يحتوي على pandas مثبتة مسبقاً، لذا يرجى تثبيتها على جهازك (`pip install pandas`) واتباع الخطوات. القيم الفعلية قد تختلف قليلاً اعتماداً على إصدار pandas.
(2) الاختلافات الرئيسية بين loc و iloc
| الميزة | loc | iloc |
|---|---|---|
| أساس الفهرس | التسمية | الموقع العددي (الموضع الصحيح) |
| نقطة نهاية الشريحة | يشمل النقطة النهائية | لا يشمل النقطة النهائية |
| تسميات نصية | ✅ | ❌ |
| فهارس سالبة | ❌ | ✅ |
| التصفية الشرطية | ✅ | ❌ |
| السيناريو الموصى به | عندما تعرف الاسم | عندما تعرف الموضع |
df.loc[0:3] يشمل الصفوف 0,1,2,3 (4 صفوف)، بينما df.iloc[0:3] يشمل الصفوف 0,1,2 (3 صفوف). هذا هو أكثر نقطة خلط شائعة بين loc و iloc.
5. التصفية الشرطية (الفهرسة المنطقية)
(1) الشروط المفردة والمتعددة
▶ مثال
> **الخرج:** قم بتشغيل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston لا يحتوي على pandas مثبتة مسبقاً، لذا يرجى تثبيتها على جهازك (`pip install pandas`) والمتابعة. القيم الفعلية قد تختلف قليلاً اعتماداً على إصدار pandas.
: التصفية الشرطية (الصعوبة ⭐⭐)
import pandas as pd
df = pd.DataFrame({
'name': ['Laptop', 'Phone', 'Tablet', 'Monitor', 'Keyboard'],
'category': ['Electronics', 'Electronics', 'Electronics', 'Electronics', 'Accessories'],
'price': [999.99, 699.99, 349.99, 449.99, 79.99],
'stock': [50, 120, 80, 35, 200],
'rating': [4.7, 4.5, 4.3, 4.6, 4.2]
})
# شرط مفرد
print(df[df['price'] > 400])
# شروط متعددة: & (و)، | (أو)، ~ (ليس)
# يجب استخدام الأقواس حول كل شرط!
high_price_good_rating = df[(df['price'] > 400) & (df['rating'] >= 4.5)]
print(high_price_good_rating[['name', 'price', 'rating']])
# شرط "أو"
hot_items = df[(df['price'] > 500) | (df['stock'] > 100)]
print(hot_items[['name', 'price', 'stock']])
# شرط "ليس"
not_electronics = df[~(df['category'] == 'Electronics')]
print(not_electronics)
> **الخرج:** قم بتشغيل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston لا يحتوي على pandas مثبتة مسبقاً، لذا يرجى تثبيتها على جهازك (`pip install pandas`) والمتابعة. القيم الفعلية قد تختلف قليلاً اعتماداً على إصدار pandas.
& / | / ~، وليس and / or / not. يجب وضع كل شرط داخل أقواس، وإلا فإن أولوية العاملين ستسبب خطأ.
(2) الشروط النصية
▶ مثال
> **الخرج:** قم بتشغيل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston لا يحتوي على pandas مثبتة مسبقاً، لذا يرجى تثبيتها على جهازك (`pip install pandas`) والمتابعة. القيم الفعلية قد تختلف قليلاً اعتماداً على إصدار pandas.
: تصفية الشروط النصية (الصعوبة ⭐)
import pandas as pd
df = pd.DataFrame({
'name': ['Wireless Mouse', 'USB Keyboard', 'Bluetooth Headset',
'Wireless Speaker', 'USB Camera'],
'price': [29.99, 79.99, 149.99, 89.99, 599.99]
})
# يحتوي على نص فرعي
wireless = df[df['name'].str.contains('Wireless')]
print(wireless)
# يبدأ بـ
usb = df[df['name'].str.startswith('USB')]
print(usb)
> **الخرج:** قم بتشغيل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston لا يحتوي على pandas مثبتة مسبقاً، لذا يرجى تثبيتها على جهازك (`pip install pandas`) والمتابعة. القيم الفعلية قد تختلف قليلاً اعتماداً على إصدار pandas.
6. طريقة الاستعلام
(1) الصيغة الأساسية
df.query('expression') — تصفية الصفوف باستخدام تعبير نصي، مما يوفر سهولة في القراءة أقرب إلى SQL.
▶ مثال
> **الإخراج:** قم بتشغيل هذا في بيئة Python محلية (pandas 2.x). خادم Piston لا يحتوي على pandas مثبتًا مسبقًا، لذا يرجى تثبيته على جهازك (`pip install pandas`) والالتزام بالخطوات. قد تختلف القيم الفعليّة قليلاً حسب إصدار pandas.
: استعلامات تعبير الاستعلام (الصعوبة ⭐⭐)
import pandas as pd
df = pd.DataFrame({
'name': ['Laptop', 'Phone', 'Tablet', 'Monitor', 'Keyboard'],
'category': ['Electronics', 'Electronics', 'Electronics', 'Electronics', 'Accessories'],
'price': [999.99, 699.99, 349.99, 449.99, 79.99],
'stock': [50, 120, 80, 35, 200],
'rating': [4.7, 4.5, 4.3, 4.6, 4.2]
})
# Simple condition
print(df.query('price > 400'))
# Multiple conditions (and/or instead of &/|)
print(df.query('price > 400 and rating >= 4.5'))
# String comparison
print(df.query('category == "Electronics"'))
# Use @ to reference Python variables
threshold = 100
print(df.query('stock > @threshold'))
# Column names with spaces (backtick)
# df.query('`unit price` > 100')
> **الإخراج:** قم بتشغيل هذا في بيئة Python محلية (pandas 2.x). خادم Piston لا يحتوي على pandas مثبتًا مسبقًا، لذا يرجى تثبيته على جهازك (`pip install pandas`) والالتزام بالخطوات. قد تختلف القيم الفعليّة قليلاً حسب إصدار pandas.
(2) الاستعلام مقابل الفهرسة المنطقية
| الميزة | الفهرسة المنطقية | الاستعلام |
|---|---|---|
| الصيغة | df[(df.a>1) & (df.b<2)] |
df.query('a>1 and b<2') |
| سهولة القراءة | أقواس متداخلة | قريب من SQL |
| مرجع المتغير | يُستخدم مباشرة | يتطلب بادئة @ |
| أسماء الأعمدة مع مسافات | لا مشكلة | يتطلب علامات اقتباس خلفية |
| الأداء | أبطأ قليلاً (بيانات كبيرة) | أسرع قليلاً (محرك محسّن) |
| المرونة | الأعلى | محدود بصيغة التعبير |
7. تصفية isin
(1) تطابق القيم المتعددة
▶ مثال
> **الإخراج:** شغّل هذا في بيئة Python محلية (pandas 2.x). خادم Piston لا يحتوي على pandas مُثبَّتًا مسبقًا، لذا يرجى تثبيته على جهازك (`pip install pandas`) والمتابعة. قد تختلف القيم الفعلي قليلاً حسب إصدار pandas.
: تصفية isin للقيم المتعددة (الصعوبة ⭐)
import pandas as pd
df = pd.DataFrame({
'name': ['Laptop', 'Phone', 'Tablet', 'Monitor', 'Keyboard'],
'category': ['Electronics', 'Electronics', 'Electronics', 'Electronics', 'Accessories'],
'price': [999.99, 699.99, 349.99, 449.99, 79.99]
})
# التصفية حسب عدة قيم للفئة
target_cats = ['Electronics', 'Audio']
# ملاحظة: الصوت غير موجود في البيانات → لا يوجد تطابق، لا يوجد خطأ
result = df[df['category'].isin(target_cats)]
print(result[['name', 'category']])
# النفي: ليس في القائمة
other = df[~df['category'].isin(['Electronics'])]
print(other)
# فقط Accessories
# isin مع قيم رقمية
target_prices = [999.99, 79.99]
print(df[df['price'].isin(target_prices)])
# Laptop و Keyboard
> **الإخراج:** شغّل هذا في بيئة Python محلية (pandas 2.x). خادم Piston لا يحتوي على pandas مُثبَّتًا مسبقًا، لذا يرجى تثبيته على جهازك (`pip install pandas`) والمتابعة. قد تختلف القيم الفعلي قليلاً حسب إصدار pandas.
(2) isin مقابل == للقيم المتعددة
| الطريقة | الصيغة | حالة الاستخدام |
|---|---|---|
| isin | df[col].isin([v1,v2,v3]) |
تطابق القيم المتعددة |
| == | df[col] == v1 |
تطابق قيمة واحدة |
| | تركيب | (df[col]==v1) | (df[col]==v2) |
بضعة قيم متعددة |
| query | df.query('col in ["v1","v2"]') |
تطابق قيم متعددة للقراءة |
8. فخ الفهرسة المتسلسلة
(1) ما هي الفهرسة المتسلسلة
▶ مثال
> **Output:** Run this in a local Python environment (pandas 2.x). The Piston server does not have pandas preinstalled, so please install it on your machine (`pip install pandas`) and follow along. Actual values may vary slightly depending on the pandas version.
: الخطر الخفي للفهرسة المتسلسلة (الصعوبة ⭐⭐)
import pandas as pd
df = pd.DataFrame({
'name': ['Laptop', 'Phone', 'Tablet'],
'price': [999.99, 699.99, 349.99],
'category': ['Electronics', 'Electronics', 'Electronics']
})
# ❌ فهرسة متسلسلة — قد تطلق SettingWithCopyWarning
# df[df['price'] > 400]['price'] = 0 # غير متوقع!
# ✅ عملية واحدة باستخدام loc
df.loc[df['price'] > 400, 'price'] = 0 # تعمل دائمًا
# ❌ شكل متسلسل آخر
# df[df['category'] == 'Electronics']['stock'] = 100
# ✅ النهج الصحيح
df.loc[df['category'] == 'Electronics', 'stock'] = 100
> **Output:** Run this in a local Python environment (pandas 2.x). The Piston server does not have pandas preinstalled, so please install it on your machine (`pip install pandas`) and follow along. Actual values may vary slightly depending on the pandas version.
df[condition][col] = value قد لا تعدّل DataFrame الأصلي (النتيجة الوسيطة هي نسخة). الطريقة الصحيحة للكتابة هي: df.loc[condition, col] = value—عملية واحدة تحدد الصفوف والأعمدة مرة واحدة.
(2) شجرة قرار التحديد الآمن
graph TB
Q["Need to select data?"] -->|"Read only"| LOC["loc / iloc / boolean"]
Q -->|"Read + Assign"| SAFE["loc[row_cond, col] = value"]
Q -->|"Complex filter"| QUERY["query()"]
Q -->|"Multi-value match"| ISIN["isin()"]
SAFE --> WARN["❌ Never: df[cond][col] = val"]
> **Output:** Run this in a local Python environment (pandas 2.x). The Piston server does not have pandas preinstalled, so please install it on your machine (`pip install pandas`) and follow along. Actual values may vary slightly depending on the pandas version.
9. مثال كامل: تصفية المنتجات متعددة الأبعاد للتجارة الإلكترونية
▶ مثال
> **الإخراج:** قم بتشغيل هذا في بيئة Python محلية (pandas 2.x). لا يحتوي خادم Pandas على pandas مثبتًا مسبقًا، لذا يرجى تثبيته على جهازك (`pip install pandas`) واتباع الخطوات. قد تختلف القيم الفعلية قليًّا حسب إصدار pandas.
: سير عمل تصفية المنتج الكامل (الصعوبة ⭐⭐⭐)
import pandas as pd
import numpy as np
# ============================================
# مثال شامل: سير عمل اختيار منتجات التجارة الإلكترونية
# متعددة الأبعاد
# ============================================
# 1. إنشاء كتالوج المنتجات
np.random.seed(42)
df = pd.DataFrame({
'name': [f'Product_{i:03d}' for i in range(1, 51)],
'category': np.random.choice(['Electronics', 'Clothing', 'Home', 'Sports'], 50),
'price': np.round(np.random.uniform(10, 500, 50), 2),
'stock': np.random.randint(0, 300, 50),
'rating': np.round(np.random.uniform(3.0, 5.0, 50), 1),
'brand': np.random.choice(['Alpha', 'Beta', 'Gamma', 'Delta'], 50)
})
# 2. loc: اختيار دقيق
print("=== الإلكترونيات بسعر > 200 ===")
elec_expensive = df.loc[
(df['category'] == 'Electronics') & (df['price'] > 200),
['name', 'price', 'rating']
]
print(elec_expensive.head())
# 3. iloc: اختيار بناءً على الموقع
print("\n=== أول 3 صفوف، أول 4 أعمدة ===")
print(df.iloc[:3, :4])
# 4. Boolean: شروط متعددة
print("\n=== تقييم عالٍ، متوفر في المخزون، أقل من 100 دولار ===")
bargains = df[(df['rating'] >= 4.5) & (df['stock'] > 0) & (df['price'] < 100)]
print(bargains[['name', 'price', 'rating', 'stock']])
# 5. query: فلتر معقد وقابل للقراءة
print("\n=== منتجات Alpha إلكترونيات أو منزلي، تقييم >= 4.0 ===")
query_result = df.query(
'brand == "Alpha" and category in ["Electronics", "Home"] and rating >= 4.0'
)
print(query_result[['name', 'category', 'rating']])
# 6. isin: فلتر متعدد القيم
print("\n=== العلامات التجارية المحددة ===")
top_brands = df[df['brand'].isin(['Alpha', 'Beta'])]
print(f"منتجات Alpha + Beta: {len(top_brands)}")
# 7. تعيين آمن
df.loc[df['stock'] == 0, 'status'] = 'Out of Stock'
df.loc[df['stock'] > 0, 'status'] = 'In Stock'
print(f"\n=== حالة المخزون ===")
print(df['status'].value_counts())
> **الإخراج:** قم بتشغيل هذا في بيئة Python محلية (pandas 2.x). لا يحتوي خادم Pandas على pandas مثبتًا مسبقًا، لذا يرجى تثبيته على جهازك (`pip install pandas`) واتباع الخطوات. قد تختلف القيم الفعلية قليًّا حسب إصدار pandas.
❓ أسئلة شائعة
df['a'] > 1 & df['b'] < 2 كـ df['a'] > (1 & df['b']) < 2، مما يسبب خطأ. يجب كتابة (df['a'] > 1) & (df['b'] < 2). لا يمكنك استخدام and/or/not - فهي لا تدعم العمليات العنصرية على مستوى المصفوفة.df[condition][col] = value هما عمليتان منفصلتان: الأولى قد تعيد إما عرضًا (view) أو نسخة (copy)، والتخصيص للنسخة في الخطوة الثانية لن يؤثر على DataFrame الأصلي. يؤدي هذا إلى خطأ خفي وهو "لقد غيرته لكنه لم يتحقق". الطريقة الصحيحة للكتابة هي: df.loc[condition, col] = value، وهي عملية واحدة تحدد كلًا من الصفوف والأعمدة دفعة واحدة.df.query('price > @min_price'). لأسماء الأعمدة التي تحتوي على مسافات، استخدم علامات الاقتباس الخلفية: df.query('unit price > 100'). داخل query، تدعم الكلمات المفتاحية مثل and/or/not/in، مما يجعلها أقرب إلى اللغة الطبيعية.df[col].isin([v1,v2,v3]) تعادل (df[col]==v1) | (df[col]==v2) | (df[col]==v3)، لكنها أكثر إيجازًا وكفاءة. استخدم ~df[col].isin(...) عندما تحتاج إلى النفي.df[df.a > 0] = 1 تضبط الصف بالكامل إلى 1 (وليس العمود a فقط). الشكل الصحيح هو: df.loc[df.a > 0, 'a'] = 1. استخدم دائمًا loc لتحديد شرط الصف والعمود المستهدف في وقت واحد.📖 ملخص
ilocيحدد حسب الموضع، ويتضمن الشرائح النقطة النهائية؛ بينماilocيحدد حسب الموقع، ويستثني الشرائح النقطة النهائية- استخدم الفهرسة المنطقية للتصفية الشرطية، واجمع الشروط المتعددة باستخدام
& / | / ~(الأقواس مطلوبة) - تستخدم طريقة
queryتعبيرات نصية، مما يوفر قراءة أقرب إلى SQL، وتدعم مراجع@variable - يُستخدم
isin لمطابقة القيم المتعددة، وهو أكثر اختصارًا وكفاءة من دمج==المتعددة مع|` - الفهرسة المترابطة
df[cond][col] = valهي خطأ دقيق؛ يجب استخدامdf.loc[cond, col] = val - استخدم
.str.contains()/.str.startswith()والطرق المماثلة لتصفية الشروط النصية - قرارات التحديد: لقراءة البيانات →
loc/iloc/query/isin؛ للتعيين →loc[شرط_الصف، اسم_العمود]
📝 تمارين
- أساسي (صعوبة ⭐): أنشئ إطار بيانات طلابي (الاسم / الرياضيات / الإنجليزية / العلوم). استخدم loc لتحديد أعمدة الاسم والرياضيات للطلاب الذين الرياضيات > 80، واستخدم iloc لتحديد أول 3 صفوف.
- متوسط (صعوبة ⭐⭐): قم بتصفية البيانات نفسها بـ 3 طرق (فهرسة منطقية / استعلام / isin): السعر بين 50 و 200، والفئة هي إلكترونيات أو منزلي. قارن كمية الكود وسهولة القراءة.
- تحدي (صعوبة ⭐⭐⭐): أنشئ إطار بيانات منتجات بـ 50 صفًا وأكمل 5 تمارين اختيار: صف واحد من loc / شريحة iloc / منطق متعدد الشروط / متغير مع query / قيم متعددة مع isin. بعد كل اختيار، قم بتعيين عمود علامة جديد باستخدام loc بأمان، وأخيرًا احسب عدد كل علامة.