Pyspark:获取列名的子字符串

Pyspark: Get substring of Column Name

我是 PySpark 的新手,想更改我的列名称,因为它们中的大多数都有一个烦人的前缀。 我的专栏名称是这样的:

e1013_var1
e1014_var2
e1015_var3
Data_date_stamp

如果存在,我想从列名中删除 EXXX_,该怎么做?因为我也想要大写的所有东西,所以我的代码到目前为止看起来像这样

for col in df.columns:
    df= df.withColumnRenamed(col, col.upper())  

感谢帮助,谢谢!

假设恼人前缀的格式是e[digits]_,我们可以使用re.sub:

import re

for col in df.columns:
    new_col = re.sub(r"e\d+_", "", col).upper()
    df = df.withColumnRenamed(col, new_col)

避免 for 循环的一个选项是使用 toDF 重命名 Spark 数据帧的所有列

import re

df_new = df.toDF(*[re.sub('e\d+_', '', c).upper() for c in df.columns])

print(df_new.columns)
# ['VAR1', 'VAR2', 'VAR3', 'DATA_DATE_STAMP']