PySpark如何删除列名中EXXX_前缀并将所有列名转为大写
PySpark列名批量修改解决方案
你需要的前缀移除功能可以通过正则表达式实现,匹配e或E开头、后续跟任意数量数字、以下划线结尾的前缀,将其替换为空后再转大写即可,两种实现方式供你选择:
实现方案1:循环遍历修改(和你现有写法逻辑兼容)
和你当前的写法逻辑一致,只需要在转大写前加一步前缀移除的正则处理即可:
import re for col in df.columns: # 先移除EXXX_前缀,再转大写 processed_col = re.sub(r'^[eE]\d+_', '', col).upper() df = df.withColumnRenamed(col, processed_col)
实现方案2:一次性批量修改(更适合宽表,性能更优)
如果你的数据集列数很多,循环调用withColumnRenamed性能较低,你可以直接生成处理后的列名列表,用toDF一次性完成所有列名修改:
import re # 生成处理后的列名列表,直接替换所有列名 processed_cols = [re.sub(r'^[eE]\d+_', '', col).upper() for col in df.columns] df = df.toDF(*processed_cols)
效果验证
你给出的示例列名经过处理后结果如下:
- 原列名
e1013_var1→ 处理后VAR1 - 原列名
e1014_var2→ 处理后VAR2 - 原列名
e1015_var3→ 处理后VAR3 - 原列名
Data_date_stamp→ 处理后DATA_DATE_STAMP
正则规则说明
^[eE]\d+_的匹配规则:
^匹配字符串开头,确保只处理前缀位置的内容,不会误删列名中间的同类格式字段[eE]匹配小写e或大写E,兼容大小写两种前缀情况\d+匹配1个或多个数字,适配任意长度的XXX编号_匹配前缀末尾的下划线,避免误删仅以e+数字开头但没有下划线的正常列名
内容的提问来源于stack exchange,提问作者Niels
相关产品推荐
相关产品推荐

