将具有不同数量元素的元组列表转换为Pandas Dataframe中的列

时间:2016-02-18 18:51:01

标签: python pandas

这是我的第一篇文章。我正在为大学的工程项目编写组合算法。我正在使用Python和Pandas ..

我有一个包含多个列的Pandas数据框,其中一列是超过20k元组的列表。
每个元组的元素数量从16.不等 即:

(10),
(10,20),
(20,30,40),
(20,30,40,50),
(10,20,30,40,50),
(10,20,30,40,50,60)

我想将其转换为6列。没有条目的空白列应归零。

我该怎么做?

...谢谢

1 个答案:

答案 0 :(得分:0)

您可以使用列表推导来扩展元组。给定几个列表,您可以将它们一起添加。例如,[' apple'] + [' pear'] = [' apple',#39; pear']。并且[' apple'] * 2 = [' apple',' apple']。

同样的原则适用于元组,因此(10,20)+(0,)* 4 =(10,20,0,0,0,0)。因此,元组用零填充。

首先检查值是否为元组(参见第一行)。如果没有,请使用该值并将其展开为元组。

s = pd.Series([(10), 
               (10,20), 
               (20,30,40), 
               (20,30,40,50), 
               (10,20,30,40,50), 
               (10,20,30,40,50,60)])

>>> s
0                          10
1                    (10, 20)
2                (20, 30, 40)
3            (20, 30, 40, 50)
4        (10, 20, 30, 40, 50)
5    (10, 20, 30, 40, 50, 60)
dtype: object

>>> pd.DataFrame([t + (0,) * (6 - len(t)) if isinstance(t, tuple) 
                  else (t,) + (0,) * 5 
                  for t in s])
    0   1   2   3   4   5
0  10   0   0   0   0   0
1  10  20   0   0   0   0
2  20  30  40   0   0   0
3  20  30  40  50   0   0
4  10  20  30  40  50   0
5  10  20  30  40  50  60