合并数据框列表

时间:2019-12-04 21:55:10

标签: python pandas

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

1 个答案:

答案 0 :(得分:2)

让我们使用join

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

加入说明

  

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

     

other:DataFrame,系列或 DataFrame列表