تقسيم (تقسيم) إدخالات سلسلة 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