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
答案 0 :(得分:2)
让我们使用join
。
df_list[0].join(df_list[1:])
加入说明
在索引或键列上将列与其他DataFrame连接起来。 通过索引一次有效地连接多个DataFrame对象 传递列表。
other:DataFrame,系列或 DataFrame列表