如何根据列表中的项目复制pandas中的行

时间:2013-04-11 15:05:14

标签: python pandas

我有一个像这样的pandas数据框:

COL     data
line1   [A,B,C]

其中数据列中的项可以是列表,也可以是逗号分隔的元素。是否有 easy 获取方式:

COL     data
line1   A
line1   B
line1   C

我可以遍历列表并通过python手动复制行,但是有没有一些 magic pandas技巧呢?关键是如何自动复制行。

谢谢!

2 个答案:

答案 0 :(得分:7)

您可以编写一个简单的清理函数,使其成为一个列表(假设它不是逗号列表,您不能简单地使用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

我担心我不认为大熊猫特别适合这种操纵。

答案 1 :(得分:1)

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