Python 将具有不同元素数的元组列表转换为数据帧中的列

Python 将具有不同元素数的元组列表转换为数据帧中的列,python,pandas,Python,Pandas,这是我的第一篇文章。我正在为大学的一个工程项目编写一个组合算法。我正在使用Python和Pandas 我有一个包含多个列的Pandas数据框架,其中一个是超过20k个元组的列表。 每个元组的元素数从1到6不等。 i、 e: 我想将其转换为6列。空白列,没有条目应该归零。 我该怎么做呢 谢谢……您可以使用列表理解来扩展元组。给定多个列表,您可以将它们添加到一起。例如,['apple']+['pear']=['apple','pear']。和['apple']*2=['apple','apple']

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

我有一个包含多个列的Pandas数据框架,其中一个是超过20k个元组的列表。
每个元组的元素数从
1
6不等。
i、 e:

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

我该怎么做呢


谢谢……

您可以使用列表理解来扩展元组。给定多个列表,您可以将它们添加到一起。例如,['apple']+['pear']=['apple','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
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