σμimplied vol · KKmax(S−K,0)udβρᵢⱼfat tailsPnL · drawdownyield · TdSₜ = μSₜ dt + σSₜ dWₜC = S·N(d₁) − K·e⁻ʳᵀ·N(d₂)σₚ² = wᵀΣwd₁ = [ln(S/K) + (r + σ²⁄2)T] ⁄ σ√T∂V/∂t + ½σ²S²·∂²V/∂S² + rS·∂V/∂S − rV = 0Sharpe = (Rₚ − R_f) ⁄ σₚVaR₉₉ = μ − 2.33σρ = Cov(X,Y) ⁄ σₓσᵧE[Rₚ] = Σ wᵢ·E[Rᵢ]φ(x) = e^(−x²/2) ⁄ √2πE[Rᵢ] = R_f + βᵢ(E[Rₘ] − R_f)dXₜ = θ(μ − Xₜ)dt + σ dWₜσ²ₜ = ω + α·ε²ₜ₋₁ + β·σ²ₜ₋₁C − P = S − K·e⁻ʳᵀΔ = ∂V/∂S Γ = ∂²V/∂S²p = (e^(rΔt) − d) ⁄ (u − d)rₜ = ln(Pₜ ⁄ Pₜ₋₁)E[Xₜ₊₁ | ℱₜ] = Xₜf* = (bp − q) ⁄ bz = (x − μ) ⁄ σP(N=k) = λᵏe^(−λ) ⁄ k!Θ = −∂V/∂Tν = S·φ(d₁)·√Tmin wᵀΣw s.t. wᵀμ = μ*∫Σ∂∞λ
σμimplied vol · KKmax(S−K,0)udβρᵢⱼfat tailsPnL · drawdownyield · TdSₜ = μSₜ dt + σSₜ dWₜC = S·N(d₁) − K·e⁻ʳᵀ·N(d₂)σₚ² = wᵀΣwd₁ = [ln(S/K) + (r + σ²⁄2)T] ⁄ σ√T∂V/∂t + ½σ²S²·∂²V/∂S² + rS·∂V/∂S − rV = 0Sharpe = (Rₚ − R_f) ⁄ σₚVaR₉₉ = μ − 2.33σρ = Cov(X,Y) ⁄ σₓσᵧE[Rₚ] = Σ wᵢ·E[Rᵢ]φ(x) = e^(−x²/2) ⁄ √2πE[Rᵢ] = R_f + βᵢ(E[Rₘ] − R_f)dXₜ = θ(μ − Xₜ)dt + σ dWₜσ²ₜ = ω + α·ε²ₜ₋₁ + β·σ²ₜ₋₁C − P = S − K·e⁻ʳᵀΔ = ∂V/∂S Γ = ∂²V/∂S²p = (e^(rΔt) − d) ⁄ (u − d)rₜ = ln(Pₜ ⁄ Pₜ₋₁)E[Xₜ₊₁ | ℱₜ] = Xₜf* = (bp − q) ⁄ bz = (x − μ) ⁄ σP(N=k) = λᵏe^(−λ) ⁄ k!Θ = −∂V/∂Tν = S·φ(d₁)·√Tmin wᵀΣw s.t. wᵀμ = μ*∫Σ∂∞λ
uantCraft Academyالمسارات
Ctrl K
AO
+1.2k متعلّم
تسجيل الدخولانضم ↗
المسارات
AO
+1.2k متعلّم
تسجيل الدخول
  • English
  • Français
  • Español
  • العربية
  • Português
  • Deutsch
  • 日本語
  • 中文
مسار Python›الوحدة 2 · NumPy وpandas لبيانات السوق›الموضوع 2.7·~40 دمبتدئ

تحديد البيانات باستخدام loc وiloc

الموضع في المسارالوحدة 2 من 11 · الموضوع 7 من 20
2.7 تحديد البيانات باستخدام loc وiloc
—درجة المختبر— / 100إجمالي XP—التتابع—

طريقتان لتحديد البيانات: بالوسم وبالموضع

يمكن عنونة إطار البيانات بطريقتين، والخلط بينهما أشيع أخطاء pandas. يختار .loc بـالوسم: وسوم الصفوف من الفهرس وأسماء الأعمدة. ويختار .iloc بـالموضع الصحيح المعدود من 0 كما في قائمة أو مصفوفة NumPy. وكلاهما يأخذ [الصفوف, الأعمدة]: فـdf.loc["AAPL", "price"] قيمة واحدة وdf.iloc[0, 0] قيمة الصف الأول والعمود الأول. احذف الجزء الثاني لأخذ صفوف كاملة: df.loc["AAPL"] هو صف AAPL كسلسلة.

import pandas as pd

df = pd.DataFrame(
    {"price": [184.25, 410.2, 171.0, 251.0],
     "volume": [200, 50, 300, 120],
     "sector": ["tech", "tech", "tech", "auto"]},
    index=["AAPL", "MSFT", "GOOG", "TSLA"],
)

print(df.loc["AAPL", "price"], df.iloc[0, 0])     # 184.25 184.25   same cell, two addresses
print(df.loc["TSLA"].to_dict())                    # {'price': 251.0, 'volume': 120, 'sector': 'auto'}
print(df.iloc[-1].to_dict())                       # the same row: position -1 is the last
print(df.loc[["TSLA", "AAPL"], "price"])           # a list of labels picks in that order
# TSLA    251.00
# AAPL    184.25
# Name: price, dtype: float64

try:
    df.loc["XXX", "price"]                         # a label that does not exist
except KeyError as error:
    print("KeyError", error)                       # KeyError 'XXX'

الشرائح: شرائح الوسوم تشمل النهاية

تتصرف الشرائح بشكل مختلف في النظامين. فشريحة الموضع df.iloc[1:3] تتبع قاعدة بايثون وتستثني النهاية: الموضعين 1 و2. أما شريحة الوسوم df.loc["MSFT":"TSLA"] فـتشمل وسمي الطرفين معًا، إذ لا «تالي» طبيعي للوسم. وتتبع شرائح الوسوم الترتيب الحالي للفهرس وليس شرطًا أن يكون مرتّبًا. وللأعمدة مرّر قائمة (["price", "volume"]) لأخذها بالترتيب الذي تعطيه. ونسيان أي نظام أنت فيه يعطي نتائج مزاحة بواحد دون أي خطأ.

import pandas as pd

df = pd.DataFrame(
    {"price": [184.25, 410.2, 171.0, 251.0], "volume": [200, 50, 300, 120]},
    index=["AAPL", "MSFT", "GOOG", "TSLA"],
)

print(df.iloc[1:3])                              # positions 1 and 2: the end is excluded
#        price  volume
# MSFT   410.2      50
# GOOG   171.0     300

print(df.loc["MSFT":"TSLA", ["volume", "price"]])    # labels MSFT..TSLA: the end is included
#       volume  price
# MSFT      50  410.2
# GOOG     300  171.0
# TSLA     120  251.0

print(df.iloc[:, 0].tolist())                    # the first column, by position
# [184.25, 410.2, 171.0, 251.0]

الشروط والإسناد مع loc

يقبل .loc أيضًا قناعًا منطقيًا للصفوف: df.loc[df["volume"] > 100, "price"] هو عمود الأسعار للصفوف التي تجتاز الاختبار، في خطوة واحدة. و.loc هو طريقة الإسناد إلى جزء مختار: df.loc["MSFT", "price"] = 1.0 تغيّر خلية واحدة وdf.loc[df["volume"] < 100, "volume"] = 0 تغيّر كل الصفوف المطابقة. وتجنّب الصيغ المتسلسلة مثل df[df["volume"] < 100]["volume"] = 0: فهي تعمل على نسخة مؤقتة. وفي pandas 3 لا يغيّر إطار مشتق الأصل أبدًا، فلتعديل جدول داخل دالة اعمل أولًا df.copy() ثم أسند بـ.loc وأرجع النسخة.

import pandas as pd

df = pd.DataFrame(
    {"price": [184.25, 410.2, 171.0, 251.0], "volume": [200, 50, 300, 120]},
    index=["AAPL", "MSFT", "GOOG", "TSLA"],
)

print(df.loc[df["volume"] > 100, "price"])       # a Boolean mask for rows, a label for the column
# AAPL    184.25
# GOOG    171.00
# TSLA    251.00
# Name: price, dtype: float64

def with_price(frame, symbol, price):
    out = frame.copy()                           # never edit the caller's table
    out.loc[symbol, "price"] = price
    return out

changed = with_price(df, "MSFT", 1.0)
print(changed.loc["MSFT", "price"], df.loc["MSFT", "price"])   # 1.0 410.2

fixed = df.copy()
fixed.loc[fixed["volume"] < 100, "volume"] = 0   # assign to all matching rows at once
print(fixed["volume"].tolist())                  # [200, 0, 300, 120]
import pandas as pd

# Integer labels are labels, not positions: a classic trap
d = pd.DataFrame({"x": [1.0, 2.0, 3.0]}, index=[10, 20, 30])

print(d.loc[20, "x"], d.iloc[0, 0])        # 2.0 1.0    label 20 is the second row
print(d.loc[10:20]["x"].tolist())          # [1.0, 2.0] labels 10 through 20, end included
print(d.iloc[0:2]["x"].tolist())           # [1.0, 2.0] positions 0 and 1, end excluded

try:
    d.loc[0, "x"]                          # there is no label 0, even though position 0 exists
except KeyError as error:
    print("KeyError", error)               # KeyError 0
اختر الأداة المناسبة وفضّل الوسوماستخدم .loc حين تعرف الأسماء (رمز أو تاريخ أو عمود) و.iloc فقط حين يكون الموضع هو المقصود («الصف الأخير» و«الثلاثة الأولى»). ويستمر الكود المبني على الوسوم بالعمل حين يُعاد ترتيب الصفوف؛ أما المبني على المواضع فيبدأ بصمت باختيار صفوف أخرى. وdf[...] المجردة اختصار متعدد المعاني (عمود أو قائمة أعمدة أو قناع صفوف)، فاكتب .loc أو .iloc صراحةً في الدوال المهمة. ويطلب المختبر أحدهما أو الآخر عمدًا.
  • df.loc[وسم_الصف, وسم_العمود] بالوسم؛ وdf.iloc[موضع_الصف, موضع_العمود] بالموضع من 0.
  • شرائح iloc تستثني النهاية؛ وشرائح وسوم loc تشملها؛ والوسم الغائب يرفع KeyError.
  • df.loc[mask, "col"] ترشّح وتختار؛ وأسند عبر .loc على .copy() وأرجعها.

التالي: groupby والتجميع، تقسيم جدول إلى مجموعات وتلخيص كل منها.

المختبر: ما الذي يُقيَّم

  • ابحث عن سعر بالرمز باستخدام price_of25 نقطة
  • خذ الصفوف بين رمزين باستخدام label_range25 نقطة
  • خذ صفوفًا بالموضع باستخدام position_range25 نقطة
  • صحّح سعرًا في نسخة باستخدام set_price25 نقطة
المستكشف · lab-40-1
▾ lab-40-1
…
bash · داخل المتصفح
learner@quantcraft:~/lab-40-1$
لم يتم تحميل Python بعدPythonLn 1, Col 1Spaces: 4UTF-8

هل تريد إعادة ضبط هذا الموضوع؟

سيعود كل ما في lab-40-1 إلى الملفات الابتدائية وستُمسح الطرفية. ستفقد حلّك الحالي ولا يمكن التراجع عن ذلك.

سيُعاد ضبطه
  • main.py ← الشيفرة الابتدائية
  • سجل الطرفية ومخرجات الاختبارات
  • التغييرات غير المُرسلة
سيُحتفظ به
  • أفضل درجة في المختبر
  • نقاط XP والتتابع
  • تقدّم المحاضرة والملاحظات

سجّل الدخول لتشغيل الكود الخاص بك.

قراءة كل المحاضرات مجانية. أنشئ حسابًا أو سجّل الدخول لتشغيل الكود وتنفيذ الاختبارات وتسليم هذا المختبر.

  • بيئة تطوير داخل المتصفح مع طرفية bash — لا حاجة لتثبيت أي شيء
  • تصحيح فوري ونقاط خبرة ومكانك في المسار
إنشاء حسابتسجيل الدخول
أو
المتابعة عبر GitHub