给出内容列表未知大小的列表列表,例如:
>>> 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)
唯一的方法吗?
答案 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