从dataframe列名中删除句点(.)

vm0i2vca  于 2021-05-27  发布在  Spark
关注(0)|答案(3)|浏览(375)

因此,我已经阅读了所有关于从列名中替换特殊字符的示例,但我似乎无法让它在句点内工作。
我试过的:


# works to remove spaces

df.select([F.col(c).alias(c.replace(' ', '_')) for c in df.columns])

# doesn't work to remove periods

df.select([F.col(c).alias(c.replace('.', '')) for c in df.columns])

# removes special characters except periods

df.select([F.col(col).alias(re.sub("[^0-9a-zA-Z$]+","",col)) for col in df.columns])

我知道如何通过引用特定列来更改列的名称,但这需要更改任何具有特殊字符列的Dataframe的列名称
具体来说,这里是给我带来麻烦的列名:“src。“业务联系人全名”

cgh8pdjw

cgh8pdjw1#

尝试使用反引号转义列名col\u name
.

df=spark.createDataFrame([('1','2')],['header','pla.nned'])
df.columns

# ['header', 'pla.nned']

from pyspark.sql import functions as F
df.select([F.col("`{0}`".format(c)).alias(c.replace('.', '')) for c in df.columns]).show()

# +------+-------+

# |header|planned|

# +------+-------+

# |     1|      2|

# +------+-------+
4dc9hkyq

4dc9hkyq2#

另一种方法是使用 reduce 以及 withColumnRenamed .

from functools import reduce

(reduce(lambda new_df, col: new_df.withColumnRenamed(col,col.replace('.','')),df.columns,df)).show()
eivnm1vs

eivnm1vs3#

select() 是已弃用的方法。为什么不简单到下面?

import re
df = pd.DataFrame(["a biz"], columns=["Src.$ of-Business Contact` Full Name"])
df.columns = [re.sub("[ ,-]", "_", re.sub("[\.,`,\$]", "", c)) for c in df.columns]
df

输出

Src_of_Business_Contact_Full_Name
0   a biz

相关问题