将未知大小列表的列表拆分为 n 号的数据框。列数

Split a list of unknown size lists into a dataframe with n no. of columns

给定一个内部列表大小未知的列表,例如:

>>> import pandas as pd
>>> lol = [[1,2,3], [3,1,1], [3,2], [1], [2,3,4]]
>>> sr = pd.Series(lol)
>>> sr
0    [1, 2, 3]
1    [3, 1, 1]
2       [3, 2]
3          [1]
4    [2, 3, 4]
dtype: object

如何将列表拆分为 3 个列表? 如果列表少于 3 个,则用 None

填充列表

目标是从 3 个列表中获取包含 3 列的数据框,即:

   0    1    2
0  1  2.0  3.0
1  3  1.0  1.0
2  3  2.0  NaN
3  1  NaN  NaN
4  2  3.0  4.0

我试过这样做:

lol = [[1,2,3], [3,1,1], [3,2], [1], [2,3,4]]
sr = pd.Series(lol)

df = []
n = 3
for row in sr:
    while len(row) < n:
        row.append(None)
    df.append(row)

df = pd.DataFrame(df)
df

[输出]:

    0   1   2
0   1   2.0 3.0
1   3   1.0 1.0
2   3   2.0 NaN
3   1   NaN NaN
4   2   3.0 4.0

是否有更简单的方法来实现相同的数据帧?

如果 n 事先未知,是否有更简单的方法来实现相同的最终数据帧?

max(len(row) for row in sr)是唯一的方法吗?

使用

In [149]: sr.apply(pd.Series)
Out[149]:
     0    1    2
0  1.0  2.0  3.0
1  3.0  1.0  1.0
2  3.0  2.0  NaN
3  1.0  NaN  NaN
4  2.0  3.0  4.0

将 Series 转换为 numpy array,然后再转换为 list

df = pd.DataFrame(sr.values.tolist())
print (df)

   0    1    2
0  1  2.0  3.0
1  3  1.0  1.0
2  3  2.0  NaN
3  1  NaN  NaN
4  2  3.0  4.0

如果输入是嵌套列表,更好的是

pd.DataFrame 构造函数可以很好地处理。

lol = [[1,2,3], [3,1,1], [3,2], [1], [2,3,4]]

pd.DataFrame(lol)

   0    1    2
0  1  2.0  3.0
1  3  1.0  1.0
2  3  2.0  NaN
3  1  NaN  NaN
4  2  3.0  4.0