2017-10-09 39 views
1

鉴于内部列表的未知大小的目录列表,例如:将一个未知大小列表分成n个没有数据的数据帧。列

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

回答

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

+1

感谢您对@jezrael发表的评论! – alvas

相关问题