如何在Python中按共同索引拼接仅含同键行的DataFrame/数组?
问题描述
我有两个CSV文件:
第一个文件内容:
index,X,Y 1,1.0,2.0 3,1.3,2.3
第二个文件内容:
index,Z 1,3.0
我需要在Python中读取这两个文件,拼接成一个m×4的numpy数组,规则是仅保留两个文件中均存在索引的行。预期结果如下(DataFrame或数组均可):
index,X,Y,Z 1,1.0,2.0,3.0
我自己写了50行代码实现,但不够Pythonic,希望用更简洁、经过充分测试的方案,要求用到numpy和/或pandas。
解决方案
用pandas可以用极简代码完成需求,步骤清晰且经过官方测试:
import pandas as pd import numpy as np # 读取文件并将index列设为索引 df1 = pd.read_csv('file1.csv', index_col='index') df2 = pd.read_csv('file2.csv', index_col='index') # 内连接合并,仅保留共同索引的行 merged_df = df1.join(df2, how='inner') # 转为numpy数组(如果不需要DataFrame的话) merged_array = merged_df.to_numpy() # 输出结果 print(merged_df) print(merged_array)
运行结果
- 输出的DataFrame完全符合预期:
X Y Z index 1 1.0 2.0 3.0
- 对应的numpy数组为:
[[1. 2. 3.]]
关键说明
how='inner'是核心:内连接会自动匹配两个DataFrame的索引,只保留同时存在的索引行,完美契合需求- 相比手动遍历索引、拼接数组的写法,pandas内置方法性能更优,代码简洁易维护
- 若只需要numpy数组,直接调用
to_numpy()即可完成转换
内容的提问来源于stack exchange,提问作者Andy
相关产品推荐
相关产品推荐

