将未知大小列表的列表拆分为 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
给定一个内部列表大小未知的列表,例如:
>>> 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