16

我有一个看起来像这样的熊猫数据框:

COL     data
line1   [A,B,C]

其中数据列中的项目可以是列表,也可以只是逗号分隔的元素。有没有简单的获取方式:

COL     data
line1   A
line1   B
line1   C

我可以遍历列表并通过 python 手动复制行,但是这样做有什么神奇的 pandas 技巧吗?关键是如何自动复制行。

谢谢!

4

2 回答 2

8

您可以编写一个简单的清理函数来使其成为一个列表(假设它不是逗号列表,并且您不能简单地使用ast.literal_eval):

def clean_string_to_list(s):
    return [c for c in s if c not in '[,]']  # you might need to catch errors

df['data'] = df['data'].apply(clean_string_to_list)

遍历行似乎是一个合理的选择:

In [11]: pd.DataFrame([(row['COL'], d)
                       for d in row['data']
                       for _, row in df.iterrows()],
                       columns=df.columns)
Out[11]:
     COL data
0  line1    A
1  line1    B
2  line1    C

恐怕我不认为熊猫专门迎合这种操纵。

于 2013-04-11T16:40:48.747 回答
2

您可以使用df.explode()选项。请参阅文档。我相信这正是您需要的功能。

于 2020-10-04T19:07:36.597 回答