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

合并两个以ID为关联字段的CSV文件并整理数据的技术问询

解决方案:用Pandas合并并整理关联CSV文件

嘿,我来帮你搞定这两个CSV的合并和数据整理!既然两个文件靠ID字段关联,用Python的pandas库是最方便高效的方案,先把你给出的Book1.csv数据整理成更清晰的表格形式:

IDTITLESUBJECT
0001BLAHOIL
0002BLAHHAMSTER
0003BLAHHAMSTER
0004BLAHPLANETS
0005BLAHJELLO
0006BLAHOIL
0007BLAHHAMSTER
0008BLAHJELLO
0009BLAHJELLO
0010BLAHHAMSTER
0011BLAHOIL
0012BLAHOIL
0013BLAHOIL
0014BLAHJELLO
0015BLAHJELLO
0016BLAHHAMSTER
0017BLAHPLANETS
0018BLAHPLANETS
0019BLAHHAMSTER
0020BLAHHAMSTER

假设你的第二个CSV文件叫Book2.csv(可以替换成实际文件名),下面是完整的操作流程:

1. 安装并导入Pandas

如果还没装pandas,先通过pip安装:

pip install pandas

然后在代码里导入库:

import pandas as pd

2. 读取两个CSV文件

# 读取第一个文件
df1 = pd.read_csv('Book1.csv')
# 读取第二个关联文件(替换成你的实际文件名)
df2 = pd.read_csv('Book2.csv')

3. 合并两个数据集

根据你的需求选择合适的合并方式:

  • 内连接(默认):只保留两个文件中都存在的ID记录
merged_df = pd.merge(df1, df2, on='ID')
  • 左连接:保留Book1里的所有记录,匹配Book2中对应的ID(无匹配的字段显示NaN)
merged_df = pd.merge(df1, df2, on='ID', how='left')
  • 右连接:保留Book2里的所有记录,匹配Book1中对应的ID
merged_df = pd.merge(df1, df2, on='ID', how='right')
  • 外连接:保留两个文件的所有记录,无匹配的字段显示NaN
merged_df = pd.merge(df1, df2, on='ID', how='outer')

4. 数据整理操作

合并后可以根据需求做针对性整理:

  • 去重:去除重复的ID记录(保留第一条)
merged_df = merged_df.drop_duplicates(subset='ID', keep='first')
  • 排序:按ID升序排列数据
merged_df = merged_df.sort_values(by='ID', ascending=True)
  • 处理缺失值:把左/外连接产生的NaN填充为默认值
# 示例:将所有NaN填充为"Unknown"
merged_df = merged_df.fillna("Unknown")
  • 筛选数据:比如只保留SUBJECT为"HAMSTER"的记录
filtered_df = merged_df[merged_df['SUBJECT'] == 'HAMSTER']

5. 保存整理后的文件

把最终结果导出为新的CSV:

merged_df.to_csv('merged_books.csv', index=False)

关键注意事项

  • 确保两个文件的ID字段格式一致(比如都是字符串类型),避免数字和字符串不匹配:
df1['ID'] = df1['ID'].astype(str)
df2['ID'] = df2['ID'].astype(str)
  • 如果第二个文件的ID列名不是ID,可以用left_on和right_on指定对应字段:
merged_df = pd.merge(df1, df2, left_on='ID', right_on='book_id', how='left')

内容的提问来源于stack exchange,提问作者A New Guy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:36:53