合并两个以ID为关联字段的CSV文件并整理数据的技术问询
解决方案:用Pandas合并并整理关联CSV文件
嘿,我来帮你搞定这两个CSV的合并和数据整理!既然两个文件靠ID字段关联,用Python的pandas库是最方便高效的方案,先把你给出的Book1.csv数据整理成更清晰的表格形式:
| ID | TITLE | SUBJECT |
|---|---|---|
| 0001 | BLAH | OIL |
| 0002 | BLAH | HAMSTER |
| 0003 | BLAH | HAMSTER |
| 0004 | BLAH | PLANETS |
| 0005 | BLAH | JELLO |
| 0006 | BLAH | OIL |
| 0007 | BLAH | HAMSTER |
| 0008 | BLAH | JELLO |
| 0009 | BLAH | JELLO |
| 0010 | BLAH | HAMSTER |
| 0011 | BLAH | OIL |
| 0012 | BLAH | OIL |
| 0013 | BLAH | OIL |
| 0014 | BLAH | JELLO |
| 0015 | BLAH | JELLO |
| 0016 | BLAH | HAMSTER |
| 0017 | BLAH | PLANETS |
| 0018 | BLAH | PLANETS |
| 0019 | BLAH | HAMSTER |
| 0020 | BLAH | HAMSTER |
假设你的第二个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
相关产品推荐
相关产品推荐

