You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Shell脚本按列名读取CSV并基于主键合并多文件

处理多CSV文件的列读取与关联查询方案

嘿,我来帮你搞定这个多CSV合并和关联的需求!下面我会一步步拆解,从按列读取数据开始,到实现一对一、一对多的关联查询,用Python的pandas库就能轻松完成。

一、按列名读取指定数据

首先,咱们先搞定按列读取的问题。pandas的read_csv()方法支持直接指定要读取的列,不用加载整个文件,效率更高。

操作步骤:

  1. 先导入pandas库:
import pandas as pd
  1. 针对每个CSV文件,用usecols参数指定要读取的列,同时注意统一主键列名(你的文件主键名不一致:H1、SASH1、SPLI等,统一成同一个名字比如H1,后续关联会更方便):
# 读取CSV1:只取H1、Name、DOB列,主键名已经是H1,不用改
df1 = pd.read_csv('CSV1.csv', usecols=['H1', 'Name', 'DOB'])

# 读取CSV2:取SASH1(主键)、Auth#、State、Status列,把主键名改成H1
df2 = pd.read_csv('CSV2.csv', usecols=['SASH1', 'Auth#', 'State', 'Status']).rename(columns={'SASH1': 'H1'})

# 读取CSV3:取SPLI(主键)、RequestedFromDate、Type、ServiceType列,主键改名为H1
df3 = pd.read_csv('CSV3.csv', usecols=['SPLI', 'RequestedFromDate', 'Type', 'ServiceType']).rename(columns={'SPLI': 'H1'})

# 读取CSV4:你提到有CRLI和ARLI两个数据集,假设它们是同结构的不同表,分别读取并重命名主键
df_crli = pd.read_csv('CSV4.csv', usecols=['CRLI', 'DateofReview', 'ReviewedBy', 'CriteriaMet']).rename(columns={'CRLI': 'H1'})
df_arli = pd.read_csv('CSV4.csv', usecols=['ARLI', 'DateofReview', 'CriteriaMet', 'CriteriaSource']).rename(columns={'ARLI': 'H1'})

二、实现类似Access的关联查询

接下来是核心的关联部分,pandas的merge()方法可以完美模拟Access的表关联,支持一对一、一对多场景。

1. 一对一关联(比如CSV1和CSV2)

如果CSV2中每个主键H1只有一条记录,那就是一对一关联。我们可以用左连接(保留CSV1的所有记录,匹配CSV2的对应记录)或者内连接(只保留两边都有匹配的记录):

# 左连接:保留df1的所有记录,匹配df2的对应数据
merged_one_to_one = pd.merge(df1, df2, on='H1', how='left')

# 如果是内连接,只保留两边都有匹配的记录,把how改成'inner'即可
# merged_one_to_one = pd.merge(df1, df2, on='H1', how='inner')

输出的结果里,每条H1对应一条CSV2的记录,和你示例里的“一对一”场景一致。

2. 一对多关联(比如CSV1和CSV3)

如果CSV3中一个H1对应多条记录,pandas的merge会自动处理这种一对多的情况,生成多条匹配的记录:

# 左连接:保留df1的所有记录,匹配df3的所有对应记录
merged_one_to_many = pd.merge(df1, df3, on='H1', how='left')

这样输出的结果里,一个H1会对应CSV3里的多条记录,和你示例里的“一对多”场景完全匹配。

3. 合并多表(同时包含一对一和一对多数据)

如果你想把所有关联的数据整合到一个结果里,可以分步合并:

# 先合并一对一的df1和df2
combined = pd.merge(df1, df2, on='H1', how='left')
# 再合并一对多的df3,此时会自动展开多条记录
combined = pd.merge(combined, df3, on='H1', how='left')
# 如果需要加入CSV4的CRLI或ARLI数据,继续merge即可
combined = pd.merge(combined, df_crli, on='H1', how='left')

三、导出最终结果

最后把合并好的数据导出成CSV文件,格式就和你期望的一致了:

combined.to_csv('merged_result.csv', index=False)

关键细节提醒:

  • 主键一定要统一命名,否则merge会找不到关联键;
  • 选择合适的连接方式(how参数):left保留左表所有记录,inner只保留匹配记录,outer保留所有记录;
  • 如果CSV4里的CRLI和ARLI是不同类型的记录,你可以选择分别合并,或者先把它们纵向合并(用pd.concat())再和主表关联。

内容的提问来源于stack exchange,提问作者sillyrabiit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:57:57