将列表转换为数据框

时间:2019-10-29 01:34:39

标签: python pandas

我正在运行一个附加三个字段的循环。 Predictfinal是一个列表,尽管不必一定是一个列表。

    predictfinal.append(y_hat_orig[0])
    predictfinal.append(mape)
    predictfinal.append(length)

最后,predictfinal返回一长串。但是我真的很想让列表符合一个数据框,其中每一行都是三列。但是,该列表未在3列之间指定,只是一长串之间带有逗号。我不知何故试图将curatefinal分为3列和currnet非结构化列表中的Dataframe-有任何帮助吗?

predictfinal
Out[88]: 
[1433.0459967608983,
 1.6407741379111223,
 23,
 1433.6389125340916,
 1.6474721044455922,
 22,
 1433.867408791692,
 1.6756763089082383,
 21,
 1433.8484984008207,
 1.6457581105556003,
 20,
 1433.6340460965778,
 1.6380908467895527,
 19,
 1437.0294365907992,
 1.6147672264908473,
 18,
 1439.7485102740507,
 1.5010415925555876,
 17,
 1440.950406295299,
 1.433891246672529,
 16,
 1434.837060644701,
 1.5252803314930383,
 15,
 1434.9716303636983,
 1.6125952442799232,
 14,
 1441.3153523102953,
 3.2633984339696185,
 13,
 1435.6932462859334,
 3.2703435261200497,
 12,
 1419.9057834496082,
 1.9100005818319687,
 11,
 1426.0739741342488,
 1.947684057178654,
 10]

3 个答案:

答案 0 :(得分:2)

基于https://stackoverflow.com/a/48347320/6926444

我们可以使用 zip() iter()来实现。下面的代码每次都会迭代三个元素。

res = pd.DataFrame(list(zip(*([iter(data)] * 3))), columns=['a', 'b', 'c'])

结果:

            a         b    c
0   1433.045997  1.640774  23
1   1433.638913  1.647472  22
2   1433.867409  1.675676  21
3   1433.848498  1.645758  20
4   1433.634046  1.638091  19
5   1437.029437  1.614767  18
6   1439.748510  1.501042  17
7   1440.950406  1.433891  16
8   1434.837061  1.525280  15
9   1434.971630  1.612595  14
10  1441.315352  3.263398  13
11  1435.693246  3.270344  12
12  1419.905783  1.910001  11
13  1426.073974  1.947684  10

答案 1 :(得分:1)

您可以这样做:

x = ['toby', 'James', 'kate', 'George', 'rick', 'Alex', 'Jein', 'medelin']
for index, name in enumerate(x):
     x[index] = name.capitalize()

输出:

pd.DataFrame(np.array(predictfinal).reshape(-1,3), columns=['origin', 'mape', 'length'])

或者您也可以修改循环:

         origin      mape  length
0   1433.045997  1.640774    23.0
1   1433.638913  1.647472    22.0
2   1433.867409  1.675676    21.0
3   1433.848498  1.645758    20.0
4   1433.634046  1.638091    19.0
5   1437.029437  1.614767    18.0
6   1439.748510  1.501042    17.0
7   1440.950406  1.433891    16.0
8   1434.837061  1.525280    15.0
9   1434.971630  1.612595    14.0
10  1441.315352  3.263398    13.0
11  1435.693246  3.270344    12.0
12  1419.905783  1.910001    11.0
13  1426.073974  1.947684    10.0

答案 2 :(得分:0)

这是一个pandas解决方案

s=pd.Series(l)
s.index=pd.MultiIndex.from_product([range(len(l)//3),['origin','map','len']])
s=s.unstack()
Out[268]: 
     len       map       origin
0   23.0  1.640774  1433.045997
1   22.0  1.647472  1433.638913
2   21.0  1.675676  1433.867409
3   20.0  1.645758  1433.848498
4   19.0  1.638091  1433.634046
5   18.0  1.614767  1437.029437
6   17.0  1.501042  1439.748510
7   16.0  1.433891  1440.950406
8   15.0  1.525280  1434.837061
9   14.0  1.612595  1434.971630
10  13.0  3.263398  1441.315352
11  12.0  3.270344  1435.693246
12  11.0  1.910001  1419.905783
13  10.0  1.947684  1426.073974