Python如何将Excel字母列编号映射到pandas DataFrame对应列
实现方案
1. 编写Excel字母列转0基索引的工具函数
首先实现一个通用转换函数,支持A-Z、AA、ZZ等所有Excel字母列标识转成pandas DataFrame对应的0开始的列索引,不需要手动计算:
def excel_col_to_index(col_str: str) -> int: # 统一转大写,兼容小写输入 col_str = col_str.strip().upper() index = 0 for c in col_str: index = index * 26 + (ord(c) - ord('A') + 1) # 转成pandas的0基索引 return index - 1
可以先测试函数是否符合预期:
excel_col_to_index('A')返回0excel_col_to_index('B')返回1excel_col_to_index('Z')返回25excel_col_to_index('AA')返回26
2. 加载JSON配置
首先修正你给出的JSON示例的语法错误(frequency字段后缺少逗号),合法配置如下:
{ "excel_template": "template.xlsx", "excel_sheets": [ {"sheet_name": "Daily", "id_column": "A", "frequency": "daily", "header" : "Number of Customers" }, // 可以继续添加其他列的映射规则 {"sheet_name": "Daily", "id_column": "B", "frequency": "daily", "header" : "Number of Products Purchased" } ] }
加载配置的代码:
import json import pandas as pd with open('你的配置文件路径.json', 'r', encoding='utf-8') as f: config = json.load(f)
3. 重命名DataFrame列
假设你已经按如下方式读取了无表头的Excel文件:
# 以读取Daily sheet为例,header=None表示无表头 df = pd.read_excel(config['excel_template'], sheet_name='Daily', header=None)
遍历配置生成列映射规则,直接重命名:
col_map = {} for item in config['excel_sheets']: if item['sheet_name'] == 'Daily': col_idx = excel_col_to_index(item['id_column']) col_map[col_idx] = item['header'] # 应用列重命名 df = df.rename(columns=col_map)
4. 调用验证
重命名完成后就可以直接用配置里的列名调取数据:
# 直接取原A列的客户数量数据 customer_count = df['Number of Customers']
如果你的配置结构是每个sheet下包含多组列映射,可以根据实际结构调整遍历逻辑,核心转换逻辑不需要改动。
内容的提问来源于stack exchange,提问作者zsh_18
相关产品推荐
相关产品推荐

