如何用Python将两个CSV文件指定列合并为一个列表
把两个CSV指定列合并成列表的解决方案
嘿,我明白你想要实现的需求:提取csvexample.csv的第一列(ID)和csvexample1.csv的第二列(Month),然后把它们合并成一个列表。我来帮你补全代码,并且提供两种实用的实现方式:
方法1:直观的按行读取法(适合行数一致的场景)
这种方式简单直接,如果你确定两个CSV的行数是对应的,用这个最方便:
import csv # 先读取第一个文件的ID列 id_list = [] with open('csvexample.csv', 'r') as csv_file: csv_reader = csv.reader(csv_file) next(csv_reader) # 跳过表头行,如果你的CSV没有表头就删掉这行 for row in csv_reader: id_list.append(row[0]) # 取第一列(索引从0开始) # 再读取第二个文件的Month列 month_list = [] with open('csvexample1.csv', 'r') as csv_file: csv_reader = csv.reader(csv_file) next(csv_reader) # 同样跳过表头 for row in csv_reader: month_list.append(row[1]) # 取第二列 # 合并成目标列表,按行对应配对 merged_result = list(zip(id_list, month_list)) print(merged_result)
运行后你会得到:[('1', 'Feb'), ('2', 'Mar'), ('3', 'May')]。要是你需要把ID转成整数,只需要把id_list.append(row[0])改成id_list.append(int(row[0]))就行。
方法2:用你一开始的defaultdict思路(适合扩展多列的场景)
如果你之后可能需要处理更多列,用defaultdict来存储每一列的数据会更灵活,这样后续扩展时不需要大改代码:
import csv from collections import defaultdict # 读取第一个CSV的所有列,提取ID列 csv1_columns = defaultdict(list) with open('csvexample.csv', 'r') as csv_file: # 用DictReader可以直接按列名取数据,更清晰 reader = csv.DictReader(csv_file) for row in reader: for col_name, value in row.items(): csv1_columns[col_name].append(value) id_list = csv1_columns['ID'] # 读取第二个CSV的所有列,提取Month列 csv2_columns = defaultdict(list) with open('csvexample1.csv', 'r') as csv_file: reader = csv.DictReader(csv_file) for row in reader: for col_name, value in row.items(): csv2_columns[col_name].append(value) month_list = csv2_columns['Month'] # 合并列表 merged_result = list(zip(id_list, month_list)) print(merged_result)
几个关键点要注意:
- 如果你的CSV文件没有表头,记得删掉
next(reader)这一行,不然会漏掉第一行数据。 - 用
csv.DictReader比csv.reader更稳妥,因为它是按列名取数据,就算之后CSV的列顺序变了,代码也不会出错。 zip()函数是核心,它会把两个列表中索引相同的元素配对成元组,正好实现你要的“按行合并”效果。
内容的提问来源于stack exchange,提问作者Nienke Luirink
相关产品推荐
相关产品推荐

