Python 如何从包含不同元素的列表中创建数据框?
我有一个像这样的专栏Python 如何从包含不同元素的列表中创建数据框?,python,python-3.x,pandas,numpy,dataframe,Python,Python 3.x,Pandas,Numpy,Dataframe,我有一个像这样的专栏 train['finally'].head(5) 0 [0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, ... 1 [0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 6, 0, 0, 0, 0, ... 2 [0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, ... 3 [2, 0, 7, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
train['finally'].head(5)
0 [0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, ...
1 [0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 6, 0, 0, 0, 0, ...
2 [0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, ...
3 [2, 0, 7, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, ...
4 [0, 0, 0, 0, 7, 0, 0, (3, 1), 0, 0, 0, 0, 0, 0...
我想用它来创建一个单独的熊猫数据帧使用此列
我试过用这个
visits_df = train['finally'].apply(lambda x: pd.Series(str(x).split(',')))
还有这个
df = pd.DataFrame(train.visits.str.split(' ').tolist())
我尝试在逗号和空格上拆分,但结果相同
但问题是,列中有些元素是这样的元组(3,1)
我尝试在逗号和空格上拆分,但结果相同
0 [0 0 0 0 3 0 0 0 0 0 ... 0 2 3 0 0 0 0 0 0] NaN
1 [0 0 0 4 0 0 0 5 0 0 ... 6 0 0 4 0 0 (2 4) 0 0]
2 [0 0 0 0 0 0 0 3 0 0 ... 5) 0 3 0 0 0 0] NaN NaN NaN
3 [2 0 7 2 0 0 0 0 0 0 ... 0 0 5 0 0 6 0 0] NaN NaN
4 [0 0 0 0 7 0 0 (3 1) 0 ... 0 0 0 0 0 0 0 0 0 0]
它将元组拆分为单独的列,我看到了额外的列,应该只有143列
如何修复此问题?调用
apply
+pd.Series
。无需转换为str
df
finally
0 [9, 5, 16, 4, 1]
1 [7, 2, 16, 30, 13]
2 [7, 5, 3, 2, 16]
3 [5, 15, 11, 23, 5]
4 [3, 1, 1, 4, 6]
5 [3, 14, 4, 0, 14]
6 [5, 1, 10, 21, 5]
7 [9, 17, 11, 10, 8]
8 [6, 11, 20, 6, 6]
9 [21, 4, 3, 4, 9]
df['finally'].apply(lambda x: pd.Series(x))
0 1 2 3 4
0 9 5 16 4 1
1 7 2 16 30 13
2 7 5 3 2 16
3 5 15 11 23 5
4 3 1 1 4 6
5 3 14 4 0 14
6 5 1 10 21 5
7 9 17 11 10 8
8 6 11 20 6 6
9 21 4 3 4 9
请注意,转换为字符串并在逗号上拆分,也会有拆分元组中数据的风险,我猜您不希望这样
请注意,如果您有一列字符串要开始,最好先使用
ast
将它们解析为python对象
import ast
df['finally'] = df['finally'].apply(ast.literal_eval)
然后按照上述流程进行操作。调用
apply
+pd.Series
。无需转换为str
df
finally
0 [9, 5, 16, 4, 1]
1 [7, 2, 16, 30, 13]
2 [7, 5, 3, 2, 16]
3 [5, 15, 11, 23, 5]
4 [3, 1, 1, 4, 6]
5 [3, 14, 4, 0, 14]
6 [5, 1, 10, 21, 5]
7 [9, 17, 11, 10, 8]
8 [6, 11, 20, 6, 6]
9 [21, 4, 3, 4, 9]
df['finally'].apply(lambda x: pd.Series(x))
0 1 2 3 4
0 9 5 16 4 1
1 7 2 16 30 13
2 7 5 3 2 16
3 5 15 11 23 5
4 3 1 1 4 6
5 3 14 4 0 14
6 5 1 10 21 5
7 9 17 11 10 8
8 6 11 20 6 6
9 21 4 3 4 9
请注意,转换为字符串并在逗号上拆分,也会有拆分元组中数据的风险,我猜您不希望这样
请注意,如果您有一列字符串要开始,最好先使用
ast
将它们解析为python对象
import ast
df['finally'] = df['finally'].apply(ast.literal_eval)
然后按照上面概述的过程进行。列的数据类型是什么?各个项目是否实际列出,以及(在这种情况下)每个列表的长度是否相同?列的数据类型是什么?各个项目是否实际列出,以及(在这种情况下)每个列表的长度是否相同?现在我感到非常感谢,它很完美,现在我感觉很好。非常感谢,它很完美