首页  >  文章  >  后端开发  >  如何将 Pandas 列表的列转换为多行?

如何将 Pandas 列表的列转换为多行?

Susan Sarandon
Susan Sarandon原创
2024-11-27 07:49:09976浏览

How Can I Transform a Pandas Column of Lists into Multiple Rows?

Pandas 列表列:为每个列表元素创建一行

在 Pandas 数据框中,可能需要转换包含列表的列分成多行,其中列表的每个元素占据自己的行。要实现这一点,有两个可行的选择。

Pandas>=0.25 的内置爆炸方法

对于 Pandas 0.25 及更高版本,.explode( ) 方法是专门为此目的而引入的。它有效地将列表转换为单独的行。

df = pd.DataFrame({'trial_num': [1, 2, 3, 1, 2, 3],
                    'subject': [1, 1, 1, 2, 2, 2],
                    'samples': [list(np.random.randn(3).round(2)) for i in range(6)]
                   })

df.explode('samples').reset_index(drop=True)  # Resetting the index for clarity

此方法处理包含列表和标量以及空列表和 NaN 的混合列。但是,需要注意的是,explode 一次对单个列进行操作。

Pandas 的自定义函数

对于早期版本的 Pandas,可以使用自定义函数:

def explode_list_column(df, column):
    # Create an empty list to store the expanded rows
    exploded_rows = []

    # Iterate through each cell in the specified column
    for row in df[column]:
        # Iterate through each element in the list
        for element in row:
            # Add a new row to the list, copying data from the current row and adding the new element
            exploded_rows.append(list(row) + [element])

    # Convert the expanded rows into a DataFrame
    return pd.DataFrame(exploded_rows, columns=df.columns + ['list_element'])

此函数采用 DataFrame 和包含列表的列的名称作为参数,它返回一个新的 DataFrame,其中每个列表元素有一列。

# Applying the exploding function
exploded_df = explode_list_column(df, 'samples')

以上是如何将 Pandas 列表的列转换为多行?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn