将一个未知大小列表分成n个没有数据的数据帧。列
问题描述:
鉴于内部列表的未知大小的目录列表,例如:将一个未知大小列表分成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)
唯一的办法吗?
答
构造函数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
答
使用
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
答
转换系列以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。
感谢您对@jezrael发表的评论! – alvas