You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PySpark中如何存储for循环结果到列表以修改DataFrame列名

实现方案

你之前用append方法失败的核心原因是没有正确收集转换函数的返回值,要么是没把转换结果传入append,要么是列表初始化位置错误。


基础for循环实现

首先提前导入正则依赖库,原有驼峰转下划线的函数逻辑不需要修改:

import re

def camel_to_snake(name):
    name = re.sub('(.)([A-Z][a-z]+)', r'\1_\2', name)
    return re.sub('([a-z0-9])([A-Z])', r'\1_\2', name).lower()

在循环外部初始化空列表,循环中把每次转换后的返回值追加到列表中即可:

df_columns = ['colNameOne', 'colNameTwo', 'colNameThree']
snake_case_cols = []

for column in df_columns:
    converted_col = camel_to_snake(column)
    snake_case_cols.append(converted_col)

运行后snake_case_cols的输出就是目标结果:

['col_name_one', 'col_name_two', 'col_name_three']

更简洁的列表推导式写法

针对逐元素转换收集结果的场景,可以直接用列表推导式替代显式for+append写法,代码更精简:

snake_case_cols = [camel_to_snake(col) for col in df_columns]

批量修改DataFrame列名

拿到转换后的列名列表,直接赋值给DataFrame的columns属性即可完成批量修改,不需要额外循环:

# 一行代码完成全量列名的驼峰转下划线替换
df.columns = [camel_to_snake(col) for col in df.columns]

你之前append操作失败基本都是踩了以下两类坑:

  • 初始化空列表后,循环内只调用转换函数,没把函数返回值作为参数传入append()
  • 把空列表的初始化语句写在了for循环内部,每次循环都会重置列表为空,最终无法留存所有转换结果

内容的提问来源于stack exchange,提问作者Ana Beatriz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 22:42:18