如何使用Pandas匹配字符串列表与大型CSV文件并导出匹配行至新CSV
实现从大型CSV中匹配筛选指定行的解决方案
需求说明
我们有两个文件需要处理:
- 小型输入文件(每行一个待匹配值):
1234 3546
- 大型CSV文件(分隔符为
|,包含数百万行数据):
1234|2021-04-20 3546|2019-05-15 8576|2021-08-05 4332|2018-10-04
目标是筛选出大型CSV中第一列存在于小型输入文件中的所有行,生成符合格式要求的新CSV文件,最终输出如下:
1234|2021-04-20 3546|2019-05-15
现有代码的问题
你当前代码里的values = list_to_find.to_string(index=False, header = False)这一步存在问题——它会把DataFrame转换成带换行的字符串,而非我们需要的可用于匹配的数值列表,这会导致后续无法正确匹配数据。
完善后的完整代码
import pandas as pd # 读取小型输入文件,获取待匹配列表 list_to_find = pd.read_csv(input_file, header=None) # 提取第一列数据并转为字符串列表,确保匹配时类型统一 match_values = list_to_find[0].astype(str).tolist() # 读取大型CSV文件,指定分隔符为|,并将第一列设为字符串类型 data_available = pd.read_csv(csv_file, sep='|', header=None, dtype={0: str}) # 筛选出第一列在匹配列表中的行 new_data = data_available[data_available[0].isin(match_values)] # 将结果输出为目标CSV,保留|分隔符,不输出索引和表头 new_data.to_csv('final.csv', index=False, header=None, sep='|')
代码关键点解释
- 类型统一:把匹配列表和大型CSV的第一列都转为字符串类型,避免因数值类型(比如int)与字符串类型不匹配导致的漏匹配问题。
- 高效匹配:使用Pandas内置的
isin()方法,它针对大型数据集做了性能优化,处理百万级数据时效率很高。 - 输出格式对齐:输出时指定
sep='|'保证生成的CSV与原文件分隔符一致,同时关闭索引和表头输出,完全符合目标格式要求。
内容的提问来源于stack exchange,提问作者gesgallar
相关产品推荐
相关产品推荐

