如何让pandas.read_excel忽略usecols中的缺失列?
Pandas读取Excel时忽略usecols中的缺失列解决方案
当你用pd.read_excel()的usecols指定了不存在的列(比如示例中用"A:D"但文件只有A-C列),会触发ParserError。以下是两种实用解决方法:
场景1:按列名指定目标列
如果你的usecols是列名列表,直接用可调用函数作为usecols参数即可自动忽略不存在的列:
import pandas as pd # 你想要读取的列名列表,包含可能不存在的列 target_columns = ["Col1", "Col2", "Col3", "Col4"] # 用lambda函数过滤存在的列 df = pd.read_excel("sample.xlsx", usecols=lambda col_name: col_name in target_columns) print(df)
运行后会自动跳过不存在的Col4,只读取存在的列。
场景2:按列字母范围指定目标列
如果用列范围(如"A:D")指定列,需要先获取文件实际列数,再筛选出有效的列索引:
import pandas as pd from openpyxl import load_workbook file_path = "sample.xlsx" target_col_range = "A:D" # 你指定的列范围 # 1. 获取Sheet的实际列数 wb = load_workbook(file_path, read_only=True) actual_col_count = wb.active.max_column wb.close() # 2. 将列范围转换为0-based索引列表 def col_range_to_indices(col_range): start_col, end_col = col_range.split(":") # 单个列字母转索引(A→0,B→1...) def col_letter_to_idx(col): idx = 0 for c in col.upper(): idx = idx * 26 + (ord(c) - ord('A') + 1) return idx - 1 start_idx = col_letter_to_idx(start_col) end_idx = col_letter_to_idx(end_col) return list(range(start_idx, end_idx + 1)) # 3. 筛选出实际存在的列索引 specified_indices = col_range_to_indices(target_col_range) valid_indices = [idx for idx in specified_indices if idx < actual_col_count] # 4. 读取Excel df = pd.read_excel(file_path, usecols=valid_indices) print(df)
这段代码会先确认文件的实际列数,再从你指定的范围中筛选出存在的列,避免索引越界错误。
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

