首页 > 解决方案 > 组合数据帧列表

问题描述

dfs_list 是一个巨大的数据框列表。例如,这里是列表中的三个数据框:

[2501 rows x 2 columns],       ABCD TEST  ABCD TRIAL
Time                                           
0.000             NaN                  1.048793
0.002             NaN                  1.048793
0.004             NaN                  1.017976
0.006             NaN                  1.059065
0.008             NaN                  1.038521
...               ...                       ...
4.992             NaN                  0.997432
4.994             NaN                  1.007704
4.996             NaN                  1.007704
4.998             NaN                  0.987160
5.000             NaN                  0.001027

[2501 rows x 2 columns],        ABC TEST  ABC TRIAL
Time                                            
0.000          0.73632                  1.039654
0.002          0.76128                  1.021422
0.004          0.82368                  0.984959
0.006          0.74880                  1.021422
0.008          0.71136                  1.048769
...                ...                       ...
4.992          0.72384                  1.012306
4.994          0.71136                  1.030538
4.996          0.76128                  0.984959
4.998          0.69888                  1.021422
5.000          0.03744                 -0.008660

[2501 rows x 2 columns]]
[      ABDCE TEST  ABCDE TRIAL
Time                                           
0.000             NaN                  1.065354
0.002             NaN                  1.065354
0.004             NaN                  1.048597
0.006             NaN                  1.048597
0.008             NaN                  1.065354
...               ...                       ...
4.992             NaN                  0.989946
4.994             NaN                  1.006703
4.996             NaN                  1.006703
4.998             NaN                  1.006703
5.000             NaN                  0.001257

我想组合数据框列表以获得如下输出:

                ABCD TEST     ABCD TRIAL    ABC TEST    ABC TRIAL   ABDCE TEST   ABCDE TRIAL

    Time                                           
    0.000       NaN        1.048793        0.73632        1.039654         NaN      1.065354
    0.002       NaN        1.048793        0.76128        1.021422         NaN      1.065354
    0.004       NaN        1.017976        0.82368        0.984959         NaN      1.048597
    0.006       NaN        1.059065        0.74880        1.021422         NaN      1.048597
    0.008       NaN        1.038521        0.71136        1.048769         NaN      1.065354
    ...         ...             ...            ...             ...         ...           ...
    4.992       NaN        0.997432        0.72384        1.012306         NaN      0.989946
    4.994       NaN        1.007704        0.71136        1.030538         NaN      1.006703
    4.996       NaN        1.007704        0.76128        0.984959         NaN      1.006703
    4.998       NaN        0.987160        0.69888        1.021422         NaN      1.006703
    5.000       NaN        0.001027        0.03744       -0.008660         NaN      0.001257

所有数据帧都是 2501 行 x 2 列,并以“时间”作为索引。所有数据帧的所有“时间”索引值都完全相同。

当我做:

pd.concat(dfs_list, axis=1)

输出是一个包含很多 Nan 值的数据帧。

我得到的最接近的是使用此代码:

reduce(lambda left, right: pd.merge(left, right, left_index=True, right_index=True), dfs_list)

这正确组合了 dfs_list 中的所有数据帧,但仅输出第一行(时间 = 0.0)。

如果我使用 ignore_index 来解决评论,数据帧结果是:

       0         1    2         3        4    ...       383      384       385  386       387
Time                                          ...                                            
0.000  NaN  1.065354  NaN  1.048793  0.73632  ...  1.010290  0.64896  0.803985  NaN  0.665822
0.002  NaN       NaN  NaN       NaN      NaN  ...       NaN      NaN       NaN  NaN       NaN
0.002  NaN       NaN  NaN       NaN      NaN  ...       NaN      NaN       NaN  NaN       NaN
0.002  NaN       NaN  NaN       NaN      NaN  ...       NaN      NaN       NaN  NaN       NaN
0.002  NaN       NaN  NaN       NaN      NaN  ...       NaN      NaN       NaN  NaN       NaN
...    ...       ...  ...       ...      ...  ...       ...      ...       ...  ...       ...
4.998  NaN       NaN  NaN       NaN      NaN  ...       NaN  0.66144  0.934120  NaN       NaN
4.998  NaN  1.006703  NaN  0.987160  0.69888  ...  0.991581      NaN       NaN  NaN  1.037600
4.998  NaN       NaN  NaN       NaN      NaN  ...       NaN      NaN       NaN  NaN       NaN
5.000  NaN       NaN  NaN       NaN      NaN  ...       NaN      NaN       NaN  NaN       NaN
5.000  NaN  0.001257  NaN  0.001027  0.03744  ... -0.009355  0.00000  0.006913  NaN  0.234896

编辑:如果我一起删除时间列并重置索引怎么办?我并不真正关心时间列.. 只是测试和试验列。然后 df_list 将如下所示:

[2501 rows x 2 columns],      ABCD TEST  ABCD TRIAL
4893             NaN                  1.048793
4894             NaN                  1.048793
4895             NaN                  1.017976
4896             NaN                  1.059065
4897             NaN                  1.038521
...              ...                       ...
7389             NaN                  0.997432
7390             NaN                  1.007704
7391             NaN                  1.007704
7392             NaN                  0.987160
7393             NaN                  0.001027

[2501 rows x 2 columns],       ABC TEST  ABC TRIAL
4007          0.73632                  1.039654
4008          0.76128                  1.021422
4009          0.82368                  0.984959
4010          0.74880                  1.021422
4011          0.71136                  1.048769
...               ...                       ...
6503          0.72384                  1.012306
6504          0.71136                  1.030538
6505          0.76128                  0.984959
6506          0.69888                  1.021422
6507          0.03744                 -0.008660

[2501 rows x 2 columns]]
[     ABCDE TEST  ABCDE TRIAL
4862             NaN                  1.065354
4863             NaN                  1.065354
4864             NaN                  1.048597
4865             NaN                  1.048597
4866             NaN                  1.065354
...              ...                       ...
7358             NaN                  0.989946
7359             NaN                  1.006703
7360             NaN                  1.006703
7361             NaN                  1.006703
7362             NaN                  0.001257

但是,如果我尝试pd.concat(dfs_list, axis=1, ignore_index=True)输出仍然是:

      0    1    2    3    4    ...  383  384  385  386       387
12    NaN  NaN  NaN  NaN  NaN  ...  NaN  NaN  NaN  NaN       NaN
13    NaN  NaN  NaN  NaN  NaN  ...  NaN  NaN  NaN  NaN       NaN
14    NaN  NaN  NaN  NaN  NaN  ...  NaN  NaN  NaN  NaN       NaN
15    NaN  NaN  NaN  NaN  NaN  ...  NaN  NaN  NaN  NaN       NaN
16    NaN  NaN  NaN  NaN  NaN  ...  NaN  NaN  NaN  NaN       NaN
...   ...  ...  ...  ...  ...  ...  ...  ...  ...  ...       ...
7491  NaN  NaN  NaN  NaN  NaN  ...  NaN  NaN  NaN  NaN  0.970004
7492  NaN  NaN  NaN  NaN  NaN  ...  NaN  NaN  NaN  NaN  0.978454
7493  NaN  NaN  NaN  NaN  NaN  ...  NaN  NaN  NaN  NaN  1.020701
7494  NaN  NaN  NaN  NaN  NaN  ...  NaN  NaN  NaN  NaN  1.037600
7495  NaN  NaN  NaN  NaN  NaN  ...  NaN  NaN  NaN  NaN  0.234896

标签: pythonpandas

解决方案


让我们使用join.

df_list[0].join(df_list[1:])

加入注意事项

在索引或键列上将列与其他 DataFrame 连接。通过传递一个列表,一次有效地按索引连接多个 DataFrame 对象。

other : DataFrame、Series 或DataFrame 列表


推荐阅读