从数据框列名称中删除句点 (.)

Posted

技术标签:

【中文标题】从数据框列名称中删除句点 (.)【英文标题】:Remove Period (.) from Dataframe Column Names 【发布时间】:2020-07-09 15:45:36 【问题描述】:

所以我已经浏览了这里所有关于替换列名中的特殊字符的示例,但我似乎无法让它在一段时间内工作。

我尝试过的:

# 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])

我知道如何通过引用特定列来更改列的名称,但这需要更改具有特殊字符列的任何数据框的列名称

具体来说,这是给我带来麻烦的列名:“Src. of Business Contact Full Name”

【问题讨论】:

它是一个 reg expr 所以句号需要用 \ 转义吗? 请多解释一下 不走运 你收到org.apache.spark.sql.AnalysisException 错误? AnalysisException: 无法解析 'Src. of Business Contact Full Name' 给定的输入列 【参考方案1】:

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

【讨论】:

然而,另一个非常好的解决方案,有没有办法让它捕获所有特殊字符? 只是扩展 reg expr。如果需要,df.columns = [re.sub("[ ,\$]", "_", re.sub("[.]", "", c)) for c in df.columns] 会将 $ 替换为下划线 @PalaniThangaraj 我更新了示例以展示如何处理更多特殊字符【参考方案2】:

尝试使用反引号转义列名`col_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|
#+------+-------+

【讨论】:

【参考方案3】:

使用 reducewithColumnRenamed 的另一种方法。

from functools import reduce

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

【讨论】:

以上是关于从数据框列名称中删除句点 (.)的主要内容,如果未能解决你的问题,请参考以下文章

从 Pandas 数据框列中删除“秒”和“分钟”

如何从数据框列的某些行中删除字符?

从 pandas 数据框列中的对象中删除逗号

如何从数据框列中删除拖尾字母

如何使用模块 re 从数据框列中删除特殊字符? [复制]

按条件从列表的数据框列中计算和删除元素