"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية تقسيم (تقسيم) إدخالات سلسلة Pandas DataFrame إلى صفوف منفصلة؟

كيفية تقسيم (تقسيم) إدخالات سلسلة Pandas DataFrame إلى صفوف منفصلة؟

تم النشر بتاريخ 2024-12-25
تصفح:870

How to Explode (Split) Pandas DataFrame String Entries into Separate Rows?

تقسيم (تقسيم) إدخالات سلسلة Pandas DataFrame إلى صفوف منفصلة

في Pandas، هناك متطلب شائع هو تقسيم القيم المفصولة بفواصل في عمود سلسلة نصية وإنشاء صف جديد لكل إدخال. يمكن تحقيق ذلك من خلال طرق مختلفة.

باستخدام Series.explode () أو DataFrame.explode ()

بالنسبة لإصدارات Pandas 0.25.0 وما فوق، فإن السلسلة. توفر أساليب Explode () وDataFrame.explode () طريقة ملائمة لتفجير الأعمدة المشابهة لـ CSV:

للمفرد الأعمدة:

df.explode('column_name')

للأعمدة المتعددة:

df.explode(['column1', 'column2'])  # Pandas 1.3.0 

ناقل عام الوظيفة

يتم توفير منهج متجه أكثر تنوعًا يعمل لكل من الأعمدة العادية وأعمدة القائمة أدناه:

def Explosion(df, lst_cols, fill_value='', keep_index=False): # تحويل أعمدة سلسلة CSV إلى أعمدة القائمة للعقيد في lst_cols: df[col] = df[col].str.split(',') # استخراج كافة الأعمدة غير القائمة idx_cols = df.columns.difference(lst_cols) # حساب أطوال القائمة العدسة = df[lst_cols[0]].str.len() # إنشاء DataFrame انفجرت النتيجة = (pd.DataFrame({ العقيد: np.repeat(df[col].القيم، العدسة) للعقيد في idx_cols }، Index=np.repeat(df.index.values, lens)) .assi(**{col: np.concatenate(df.loc[lens>0, col].values) للعمود في lst_cols})) # التعامل مع صفوف القائمة الفارغة إذا (العدسة == 0).أي (): النتيجة = result.append(df.loc[lens==0, idx_cols],sort=False).fillna(fill_value) # التراجع عن ترتيب الفهرس وإعادة ضبط الفهرس إذا طلب ذلك النتيجة = result.sort_index() إذا لم يكن save_index: النتيجة = result.reset_index(drop=True) إرجاع النتيجة
def explode(df, lst_cols, fill_value='', preserve_index=False):
    # Convert CSV string columns to list columns
    for col in lst_cols:
        df[col] = df[col].str.split(',')

    # Extract all non-list columns
    idx_cols = df.columns.difference(lst_cols)

    # Calculate list lengths
    lens = df[lst_cols[0]].str.len()

    # Create exploded DataFrame
    result = (pd.DataFrame({
        col: np.repeat(df[col].values, lens)
        for col in idx_cols
    }, index=np.repeat(df.index.values, lens))
        .assign(**{col: np.concatenate(df.loc[lens>0, col].values)
                    for col in lst_cols}))

    # Handle empty list rows
    if (lens == 0).any():
        result = result.append(df.loc[lens==0, idx_cols], sort=False).fillna(fill_value)

    # Revert index order and reset index if requested
    result = result.sort_index()
    if not preserve_index:
        result = result.reset_index(drop=True)

    return result

التطبيقات

عمود CSV:

df['var1'] = df['var1']. str.split(',')
df['var1'] = df['var1'].str.split(',')

قائمة متعددة الأعمدة:

explode(df, ['num', 'text'], fill_value='')
            
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3