«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как разбить (разделить) строковые записи DataFrame Pandas на отдельные строки?

Как разбить (разделить) строковые записи DataFrame Pandas на отдельные строки?

Опубликовано 25 декабря 2024 г.
Просматривать:936

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

Разделение (разделение) строковых записей 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