使用Python处理多CSV文件对应字段 计算同位置值最值并导出CSV
实现方案
方案1:使用Python内置csv模块(无需安装第三方依赖)
适合不想额外装库的场景,完全使用Python标准库实现:
import csv # -------------------------- 配置项 -------------------------- # 替换为你实际的CSV文件路径列表 INPUT_CSV_PATHS = ["file1.csv", "file2.csv", "file3.csv"] OUTPUT_CSV_PATH = "min_max_result.csv" # 按你实际数据类型选择int/float VALUE_TYPE = float # ----------------------------------------------------------- # 读取所有CSV的全量数据 all_csv_data = [] for path in INPUT_CSV_PATHS: with open(path, "r", encoding="utf-8") as f: reader = csv.reader(f) # 每行数据转换为数值类型存储 single_csv_data = [[VALUE_TYPE(cell) for cell in row] for row in reader] all_csv_data.append(single_csv_data) # 校验所有CSV行列数一致,避免位置匹配错误 row_total = len(all_csv_data[0]) col_total = len(all_csv_data[0][0]) for data in all_csv_data: assert len(data) == row_total, "存在CSV行数不匹配" assert len(data[0]) == col_total, "存在CSV列数不匹配" result_rows = [] for row_idx in range(row_total): current_result_row = [] for col_idx in range(col_total): # 这里的same_pos_values就是你要的按位置生成的对应值列表 same_pos_values = [data[row_idx][col_idx] for data in all_csv_data] # 计算最小最大值并拼接为要求格式 min_val = min(same_pos_values) max_val = max(same_pos_values) current_result_row.append(f"{min_val}-{max_val}") result_rows.append(current_result_row) # 写入结果到新CSV with open(OUTPUT_CSV_PATH, "w", encoding="utf-8", newline="") as f: writer = csv.writer(f) writer.writerows(result_rows)
方案2:使用pandas实现(代码更简洁)
如果允许使用第三方库,用pandas+numpy的方案代码量更少,处理效率更高:
import pandas as pd import numpy as np # 配置项 INPUT_CSV_PATHS = ["file1.csv", "file2.csv", "file3.csv"] OUTPUT_CSV_PATH = "min_max_result.csv" # 读取所有CSV为DataFrame,若CSV有表头可删除header=None参数 df_list = [pd.read_csv(path, header=None, dtype=np.float64) for path in INPUT_CSV_PATHS] # 堆叠为三维数组后按文件维度计算最小最大值 data_arr = np.array(df_list) min_arr = data_arr.min(axis=0) max_arr = data_arr.max(axis=0) # 拼接为要求的字符串格式 result_df = min_arr.astype(str) + "-" + max_arr.astype(str) # 写入结果,不需要索引和表头 result_df.to_csv(OUTPUT_CSV_PATH, header=False, index=False, encoding="utf-8")
注意事项
- 所有待处理的CSV文件必须保证行列数完全一致,否则会出现结果错位或报错
- 请根据你的实际数据类型调整数值转换的参数,避免字符串转数值报错
- 如果CSV第一行是表头,两个方案都可以直接兼容,只需保证所有文件的表头位置对应即可
内容的提问来源于stack exchange,提问作者Susanta Dutta
相关产品推荐
相关产品推荐

