如何读取列名与指定列表近似匹配而非完全一致的CSV文件
按列名近似匹配读取CSV指定列的实现方法
pandas的usecols参数除了传入精确列名列表外,支持传入可调用的匹配函数,你可以直接把近似匹配规则写在函数中传入,不需要读取全量列后再过滤,效率更高。
方法1:直接传入匹配函数(推荐,内存占用最低)
直接在读取CSV时通过usecols传入匹配规则,读取阶段就自动过滤非目标列:
import pandas as pd # 你需要匹配的列前缀列表 columns_to_read = ["A", "C", "E"] df = pd.read_csv( "替换为你的CSV文件路径.csv", # 匹配规则:列名以 目标前缀+双下划线 开头即判定为匹配 usecols=lambda col_name: any(col_name.startswith(f"{prefix}__") for prefix in columns_to_read) )
如果你的匹配规则不是前缀匹配,只需修改lambda中的判断逻辑即可:比如要匹配列名包含目标字符串,将startswith改为__contains__即可。
方法2:先匹配表头再读取(适合需要校验匹配结果的场景)
如果你需要先确认匹配到的列是否符合预期,可以先只读表头完成匹配,再用匹配到的精确列名读取数据:
import pandas as pd columns_to_read = ["A", "C", "E"] # 仅读取表头行,不加载任何数据 all_columns = pd.read_csv("替换为你的CSV文件路径.csv", nrows=0).columns.tolist() # 匹配得到精确列名列表 matched_columns = [ col for col in all_columns if any(col.startswith(f"{prefix}__") for prefix in columns_to_read) ] # 按需打印校验匹配结果 # print(matched_columns) # 读取目标列 df = pd.read_csv("替换为你的CSV文件路径.csv", usecols=matched_columns)
内容的提问来源于stack exchange,提问作者Rrptm
相关产品推荐
相关产品推荐

