Разделение (разделение) строковых записей DataFrame Pandas на отдельные строки
В Pandas общим требованием является разделение значений, разделенных запятыми, в столбец текстовой строки и создайте новую строку для каждой записи. Этого можно достичь различными методами.
Использование Series.explode() или DataFrame.explode()
Для версий Pandas 0.25.0 и выше функция Series. Методы взорвать() и DataFrame.explode() предоставляют удобный способ расчленения в формате CSV. столбцы:
Для отдельных столбцов:
df.explode('column_name')
Для нескольких столбцов:
df.explode(['column1', 'column2']) # Pandas 1.3.0
Общая векторизованная функция
Более универсальный векторизованный подход, который работает как для обычных столбцов, так и для столбцов списка, представлен ниже:
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(',')
Множественный список Столбцы:
explode(df, ['num', 'text'], fill_value='')
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3