将未知大小列表列表拆分为n个数据帧。列

时间:2017-10-09 06:41:43

标签: python pandas dataframe series nested-lists

给出内容列表未知大小的列表列表,例如:

>>> 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

[OUT]:

    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)唯一的方法吗?

3 个答案:

答案 0 :(得分:2)

使用

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

答案 1 :(得分:2)

将系列转换为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

如果输入是嵌套列表,则更好的是piRSquared's solution

答案 2 :(得分:2)

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