CSV 合并工具 (habit merge-csv)
概述
habit merge-csv 工具用于横向合并多个 CSV 或 Excel 文件,基于公共索引列进行连接。
主要用途:
合并不同来源的特征数据
整合多个时间点的测量结果
合并不同模态的数据
与纵向分析工具的区别:
merge-csv: 横向合并(增加列),用于整合不同来源的数据
test-retest: 评估重测一致性,用于质量控制
使用方法
基本用法
habit merge-csv file1.csv file2.csv file3.csv -o merged.csv
指定索引列
habit merge-csv file1.csv file2.csv -o merged.csv --index-cols PatientID
指定不同索引列
habit merge-csv file1.csv file2.csv -o merged.csv --index-cols ID1 ID2
使用 Excel 文件
habit merge-csv file1.xlsx file2.xlsx -o merged.csv
指定分隔符
habit merge-csv file1.csv file2.csv -o merged.csv --separator ";"
参数说明
input_files: 要合并的输入文件 (至少2个)
-o, --output: 输出文件路径 (必需)
--index-cols: 索引列名 - 不指定:使用第一个文件的第一个列 - 单个列名:所有文件使用相同列名 - 多个列名:按顺序匹配到每个文件
--separator: CSV 分隔符 (默认逗号)
--encoding: 文件编码 (默认 UTF-8)
--join-type: 连接类型 - inner: 只保留所有文件中都有索引的行 - outer: 保留所有索引 (默认)
使用场景示例
场景1:合并两个扫描的特征
habit merge-csv ./data/scan1_features.csv ./data/scan2_features.csv -o ./data/merged_features.csv --index-cols PatientID
场景2:合并临床数据和影像特征
habit merge-csv ./data/clinical.csv ./data/radiomics.csv -o ./data/combined.csv --index-cols SubjectID
场景3:合并多个时间点数据
habit merge-csv baseline.csv month3.csv month6.csv month12.csv -o longitudinal.csv --index-cols PatientID
场景4:处理不同列名的情况
habit merge-csv file1.csv file2.csv -o merged.csv --index-cols ID ID_number
输出文件说明
合并后的文件包含:
索引列 (PatientID 或指定的列名)
第一个文件的所有其他列 (加上前缀区分来源)
第二个文件的所有其他列 (加上前缀区分来源)
...
输入文件1 (scan1.csv):
PatientID |
Feature_A |
Feature_B |
|---|---|---|
sub-001 |
12.5 |
0.45 |
sub-002 |
14.2 |
0.67 |
输入文件2 (scan2.csv):
PatientID |
Feature_C |
Feature_D |
|---|---|---|
sub-001 |
102.3 |
0.85 |
sub-002 |
98.1 |
0.92 |
输出文件 (merged.csv):
PatientID |
scan1_Feature_A |
scan1_Feature_B |
scan2_Feature_C |
scan2_Feature_D |
|---|---|---|---|---|
sub-001 |
12.5 |
0.45 |
102.3 |
0.85 |
sub-002 |
14.2 |
0.67 |
98.1 |
0.92 |
注意事项
索引列必须唯一: 每个文件中索引列不能有重复值
索引列数据类型: 确保所有文件的索引列数据类型一致
内存限制: 大文件可能需要较长时间合并
列名冲突: 同名列会自动添加前缀区分
编码问题: 确保所有文件使用相同编码
常见问题
Q: 合并后某些行丢失?
A: 默认使用 inner join,只有所有文件中都存在的索引才会保留。使用 --join-type outer 保留所有行。
Q: 合并后列名重复?
A: 工具会自动为不同来源的同名列添加前缀区分。
Q: 可以合并多少个文件?
A: 没有硬性限制,但建议不超过 20 个文件,以免内存不足。