Удалить точку (.) Из имен столбцов фрейма данных - PullRequest
2 голосов
/ 09 июля 2020

Итак, я просмотрел все приведенные здесь примеры замены специальных символов в именах столбцов, но не могу заставить его работать в течение определенного периода.

Что я пробовал:

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

Я знаю, как изменить имя столбца, ссылаясь на этот столбец c, но для этого необходимо изменить имена столбцов для любого фрейма данных со столбцами со специальными символами

Конкретно здесь это имя столбца, которое вызывает у меня проблемы: «Sr c. of Business Contact Full Name»

Ответы [ 3 ]

1 голос
/ 09 июля 2020

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

1 голос
/ 09 июля 2020

Попробуйте экранировать имена столбцов с помощью обратных кавычек `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|
#+------+-------+
0 голосов
/ 09 июля 2020

Другой способ go об этом использовать reduce и withColumnRenamed.

from functools import reduce

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