Pandas 将包含列表的列拆分为多个列

在本文中,我们将介绍如何使用Pandas将包含列表的列拆分为多个列。这种情况可能会在数据中出现,例如,我们有一列包含多种颜色,但我们需要对每种颜色进行操作或分析。

阅读更多: Pandas 教程

首先,我们需要准备一个包含列表列的数据集。对于本文,我们可以使用以下代码来创建一个包含两列的数据集,其中一列包含名称,另一列包含颜色的列表。


import pandas as pd
data = {'Name': ['John', 'Paul', 'George', 'Ringo'],
        'Colors': [['Red', 'Green'], ['Blue'], ['Purple', 'Green', 'Yellow'], ['Yellow']]}
df = pd.DataFrame(data)

在上述代码中,我们使用字典创建了一个数据,其中包含了两个键-值对,一个键为姓名,另一个键为颜色,它们分别代表数据集中的两列。颜色列包含不同数量的颜色,其中有些人可能有多种颜色,而有些人只有一种颜色。

我们使用Pandas的DataFrame函数从上述数据中创建了一个数据帧。现在,我们有一个包含两个列的数据框,其中一列包含姓名,另一列包含颜色的列表。

接下来,我们需要使用Pandas将颜色列拆分成多个列。在这里,我们可以使用apply函数对数据的每一行使用自定义函数来拆分列。我们可以使用以下代码来将颜色列拆分成三列。

def split_colors(row):
        return row['Colors'][0], row['Colors'][1], row['Colors'][2]
    except:
        return (None, None, None)
df[['Color 1', 'Color 2', 'Color 3']] = df.apply(split_colors, axis=1, result_type="expand")

在上述代码中,我们定义了一个自定义函数split_colors。在该函数中,我们尝试访问每一行的颜色列的前三项。如果有一个或多个项不存在,则设置其为None。在此之后,我们使用Pandas的apply函数将该函数作用于数据集的每一行,并使用新的列名“Color 1”,“Color 2”和“Color 3”拆分颜色列。

现在,我们有一个拆分颜色的数据框,其中包含新的列Color 1,Color 2和Color 3。以下是我们拆分后的数据框的样子:

Colors Color 1 Color 2 Color 3