python - 组合数据帧列表
问题描述
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
解决方案
让我们使用join
.
df_list[0].join(df_list[1:])
加入注意事项
在索引或键列上将列与其他 DataFrame 连接。通过传递一个列表,一次有效地按索引连接多个 DataFrame 对象。
other : DataFrame、Series 或DataFrame 列表
推荐阅读
- iexpress - Windows IExpress 是否仍然暴露漏洞?
- kubernetes - 使用 minikube 将 pod 连接到本地进程
- node.js - TypeError:UserModel.create 不是函数,Sequelize
- python - 从 Django 的 UserModel 扩展并使用它来登录
- java - 为什么我在 java 中收到死代码警告?
- out-of-memory - 生成 xml 时出现 XStream OutOfMemoryError
- python - 当我们运行许多任务时,python 多处理池不起作用
- java - 如何在 LinnearLayouts 中对齐两个 TextView?
- linux - npm 是使用 sudo 安装的吗?
- c# - 在带有 MVVM 设计模式的代码隐藏中使用文本框粘贴事件?