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中文网其他相关文章!