将(元组)列表列表转换为大熊猫中的长数据框

时间:2020-07-07 03:49:18

标签: python pandas list dataframe

我有一个列表列表(包含元组):

mylist = [[0, ('a',3), ('b',4), ('c',5)], [1, ('a',2), ('d',7), ('e',6)], [2, ('b',1), ('a',2), ('d',3)]]

我想将其转换为长数据框。我的预期输出:

v1  v2  v3 
0   a   3
0   b   4
0   c   5
1   a   2
1   d   7
1   e   6
2   b   1
2   a   2
2   d   3

感谢您的时间和帮助!

3 个答案:

答案 0 :(得分:5)

您可以使用list comprehensiontuple unpacking进行尝试。

#          (0, 'a', 3)
#               |
pd.DataFrame([(i,*t) for i,*v in mylist for t in v])
# In 1st iteration       |  |               |
#                        0  |           ('a', 3)
#            [('a', 3), ('b', 4), ('c', 5)]

   0  1  2
0  0  a  3
1  0  b  4
2  0  c  5
3  1  a  2
4  1  d  7
5  1  e  6
6  2  b  1
7  2  a  2
8  2  d  3

答案 1 :(得分:2)

这是将元组填充到第一项的一种方法:

s = [(x[0],)+ y for x in mylist for y in x[1:]]

print (pd.DataFrame(s, columns=["v1","v2","v3"]))

   v1 v2  v3
0   0  a   3
1   0  b   4
2   0  c   5
3   1  a   2
4   1  d   7
5   1  e   6
6   2  b   1
7   2  a   2
8   2  d   3

答案 2 :(得分:1)

newmylist = []

for i in mylist:
    for j in i[1:]:
        newmylist.append((i[0],) + j)

pd.DataFrame(newmylist, columns=["v1","v2","v3"])

输出:

    v1 v2  v3
0   0  a   3
1   0  b   4
2   0  c   5
3   1  a   2
4   1  d   7
5   1  e   6
6   2  b   1
7   2  a   2
8   2  d   3