如何在pandas中按大写字母拆分列名并转换为下划线分隔小写格式
报错原因
re.findall要求第二个参数必须传入字符串类型,你传入的[df.columns]是包裹了pandas列索引对象的列表,不符合参数类型要求,所以触发TypeErrorre.findall本身只能处理单个字符串,无法直接批量处理整个列索引数组
正确实现代码
方法1:正则拆分拼接(兼容性最好,支持所有pandas版本)
先定义大驼峰转蛇形命名的工具函数,再批量应用到所有列名:
import re def camel_to_snake(col_name): # 拆分所有大写字母开头的片段 name_parts = re.findall('[A-Z][^A-Z]*', col_name) # 全小写后用下划线拼接 return '_'.join(part.lower() for part in name_parts) # 批量处理所有列名 df.columns = [camel_to_snake(col) for col in df.columns]
方法2:pandas字符串方法(pandas 1.4+版本可用,代码更简洁)
直接用pandas内置的字符串替换方法实现,无需额外循环:
# 小写字母和大写字母的间隙插入下划线后整体转小写 df.columns = df.columns.str.replace(r'(?<=[a-z])(?=[A-Z])', '_', regex=True).str.lower()
两种方法处理你的样例列名ProjectNo、DescriptionOfDesign都会得到预期的project_no、description_of_design效果。
内容的提问来源于stack exchange,提问作者yangyang
相关产品推荐
相关产品推荐

