转换 DataFrame 中的列表列表

convert list of lists in dataframe

提问人:Beginner_01 提问时间:1/4/2023 最后编辑:Beginner_01 更新时间:1/4/2023 访问量:81

问:

我有以下数据

0      [[-0.932, 2.443, -1....
1      [[-1.099, 2.140, -1.4...
2      [[-0.985, -1.654, -1....
3      [[-1.339, 2.070, -0....
4      [[-1.119, 2.788, -2....
                             ...                        
494    [[-0.023, 2.688, -1...
495    [[1.897, 0.0, -2.249,...
496    [[1.538, 2.349, -0.6...
497    [[-0.141, 2.320, -0...
498    [[-0.483, 1.587, -1....
Length: 499, dtype: object

每行大约有 80 个列表,我想将它们变成列并获取数据:(list of lists)

          ID  col1      col2   ...   col80
1.1.2020  0   -0.932    ...
2.1.2020  0   2.443     ...
3.1.2020  0   -1        ...       
1.1.2020  1   -1.099
2.1.2020  1   2.140
3.1.2020  1   -1.4      ...

其中列 ID 来自列表指示符 (0,1,..,498)。索引列 (1.1.2020, 2.1.2020..) 另存为另一个对象 ()。这可能吗,如何?date

Python Pandas 数据帧 嵌套列表

评论


答:

2赞 Chrysophylaxs 1/4/2023 #1

假设您有如下数据:

import numpy as np
import pandas as pd

ser = pd.Series(np.arange(90).reshape(10, 3, 3).tolist())
0             [[0, 1, 2], [3, 4, 5], [6, 7, 8]]
1     [[9, 10, 11], [12, 13, 14], [15, 16, 17]]
2    [[18, 19, 20], [21, 22, 23], [24, 25, 26]]
3    [[27, 28, 29], [30, 31, 32], [33, 34, 35]]
4    [[36, 37, 38], [39, 40, 41], [42, 43, 44]]
5    [[45, 46, 47], [48, 49, 50], [51, 52, 53]]
6    [[54, 55, 56], [57, 58, 59], [60, 61, 62]]
7    [[63, 64, 65], [66, 67, 68], [69, 70, 71]]
8    [[72, 73, 74], [75, 76, 77], [78, 79, 80]]
9    [[81, 82, 83], [84, 85, 86], [87, 88, 89]]
dtype: object

那么我认为你可以像这样完成大部分工作:

out = ser.explode().apply(pd.Series).reset_index(names="ID")
    ID   0   1   2
0    0   0   1   2
1    0   3   4   5
2    0   6   7   8
3    1   9  10  11
4    1  12  13  14
5    1  15  16  17
6    2  18  19  20
7    2  21  22  23
8    2  24  25  26
9    3  27  28  29
10   3  30  31  32
11   3  33  34  35
12   4  36  37  38
13   4  39  40  41
14   4  42  43  44
15   5  45  46  47
16   5  48  49  50
17   5  51  52  53
18   6  54  55  56
19   6  57  58  59
20   6  60  61  62
21   7  63  64  65
22   7  66  67  68
23   7  69  70  71
24   8  72  73  74
25   8  75  76  77
26   8  78  79  80
27   9  81  82  83
28   9  84  85  86
29   9  87  88  89

但是您需要重命名列并自行更改索引(您如何确定这些日期?

评论

1赞 Beginner_01 1/4/2023
谢谢,这就是我要找的。我提供的数据是在应用标准缩放器之后,因此我将日期作为原始数据(“data.index”)中的索引
1赞 Chrysophylaxs 1/4/2023
很高兴它起作用了,请记住,在此示例中,ID 列源于在爆炸之前具有默认的 RangeIndex。