الدمج والربط وتنظيف البيانات
ادمج DataFrames وتعامَل مع القيم المفقودة باحترافية
الدمج والربط وتنظيف البيانات درس مجاني في Python Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Python Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Python Academy 4 دروس في المجموع.
pd.merge
تربط pd.merge(left, right, on="key") بين DataFrame باستخدام عمود مشترك، على نحو مشابه لـ SQL JOIN.
import pandas as pd
users = pd.DataFrame({"id":[1,2,3],"name":["A","B","C"]})
orders = pd.DataFrame({"user_id":[1,1,2],"amount":[100,50,200]})
result = pd.merge(users, orders, left_on="id", right_on="user_id")
print(result)أنواع الربط
حدّد how="inner" (الافتراضي)، أو "left"، أو "right"، أو "outer" للتحكم في الصفوف التي يتم الاحتفاظ بها.
import pandas as pd
A = pd.DataFrame({"key":["a","b","c"],"val":[1,2,3]})
B = pd.DataFrame({"key":["b","c","d"],"x":[10,20,30]})
print(pd.merge(A, B, on="key", how="left")) # all of A
print(pd.merge(A, B, on="key", how="outer")) # all rowsdf.join
تربط df.join(other) البيانات باستخدام الفهرس. وتكون أسرع وأبسط عند الدمج حسب الفهرس بدلًا من العمود.
import pandas as pd
df1 = pd.DataFrame({"a":[1,2]}, index=["x","y"])
df2 = pd.DataFrame({"b":[3,4]}, index=["x","y"])
print(df1.join(df2))
# x: a=1 b=3
# y: a=2 b=4concat
تكدّس pd.concat([df1, df2]) DataFrames عموديًا (axis=0) أو أفقيًا (axis=1).
import pandas as pd
df1 = pd.DataFrame({"a":[1,2]})
df2 = pd.DataFrame({"a":[3,4]})
print(pd.concat([df1,df2], ignore_index=True))
# a: 1 2 3 4
# Horizontal:
df3 = pd.DataFrame({"b":[5,6]})
print(pd.concat([df1,df3], axis=1))التعامل مع القيم المفقودة
اكتشف NaN باستخدام isna()/notna(). املأ القيم باستخدام fillna(). واحذفها باستخدام dropna().
import pandas as pd, numpy as np
df = pd.DataFrame({"a":[1,np.nan,3],"b":[np.nan,2,3]})
print(df.isna().sum()) # count nulls per column
df["a"] = df["a"].fillna(0)
df = df.dropna() # drop rows with any nullاستراتيجيات fillna
املأ القيم المفقودة بثابت، أو بالملء إلى الأمام (ffill)، أو بالملء إلى الخلف (bfill)، أو بمتوسط العمود.
import pandas as pd, numpy as np
df = pd.DataFrame({"val":[1, np.nan, np.nan, 4]})
print(df["val"].ffill()) # forward fill: 1 1 1 4
print(df["val"].bfill()) # back fill: 1 4 4 4
print(df["val"].fillna(df["val"].mean())) # fill with meanتغيير أنواع البيانات
استخدم astype() لتحويل أنواع الأعمدة. واستخدم pd.to_datetime() لتحليل التواريخ، وpd.to_numeric مع errors="coerce" للتحويل الرقمي الآمن.
import pandas as pd
df = pd.DataFrame({"age":["25","30","35"],"date":["2024-01-01","2024-06-15","2024-12-31"]})
df["age"] = df["age"].astype(int)
df["date"] = pd.to_datetime(df["date"])
print(df.dtypes)تنظيف السلاسل النصية
يوفّر مُحدِّد الوصول .str في Pandas عمليات متجهة على السلاسل النصية، مثل: strip() وlower() وreplace() وextract().
import pandas as pd
df = pd.DataFrame({"name":[" Alice "," bob","CAROL"]})
df["clean"] = df["name"].str.strip().str.title()
print(df["clean"]) # Alice / Bob / Carolإعادة تسمية الأعمدة وترتيبها
أعد التسمية باستخدام df.rename(columns={"old":"new"}). وأعد الترتيب باستخدام الفهرسة بقائمة.
import pandas as pd
df = pd.DataFrame({"a":[1],"b":[2],"c":[3]})
df = df.rename(columns={"a":"alpha","b":"beta"})
df = df[["c","beta","alpha"]] # reorder
print(df.columns.tolist()) # ['c', 'beta', 'alpha']اكتشاف التكرارات
اعثر على التكرارات باستخدام duplicated() وأزلها باستخدام drop_duplicates().
import pandas as pd
df = pd.DataFrame({"id":[1,2,1,3],"val":["a","b","a","c"]})
print(df.duplicated()) # [F F T F]
print(df[df.duplicated()]) # show duplicates
clean = df.drop_duplicates(subset=["id"])استخدام apply لتحويل الصفوف والأعمدة
تطبّق df.apply(func, axis=1) دالة على كل صف. أما axis=0 فتطبّقها على كل عمود.
import pandas as pd
df = pd.DataFrame({"a":[1,2,3],"b":[4,5,6]})
# New column = row sum:
df["total"] = df.apply(lambda row: row["a"] + row["b"], axis=1)
print(df)تحقق سريع
ماذا تفعل df.fillna(method="ffill")؟
مراجعة
استخدم pd.merge لعمليات الربط بأسلوب SQL، وpd.concat للتكديس. وتعامل مع NaN باستخدام isna() وfillna() وdropna(). ونظّف السلاسل النصية باستخدام مُحدِّد الوصول .str. وحوّل الأنواع باستخدام astype() وpd.to_datetime().
الأسئلة الشائعة
هل درس «الدمج والربط وتنظيف البيانات» مجاني؟
نعم — نص درس «الدمج والربط وتنظيف البيانات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Python Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Python Academy 4 دروس في المجموع.
ماذا ستتعلم في «الدمج والربط وتنظيف البيانات»؟
ادمج DataFrames وتعامَل مع القيم المفقودة باحترافية تتمرن على Python Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Python Academy؟
لا تُشترط خبرة سابقة. Python Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «الدمج والربط وتنظيف البيانات»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Python Academy هذا؟
نعم. كل درس في Python Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- أساسيات Series وDataFrame
- الفهرسة والتصفية والأقنعة المنطقية
- GroupBy والتجميع والجداول المحورية
- الدمج والربط وتنظيف البيانات