J'ai un dataframe dans pyspark qui a 15 colonnes.
Les noms de colonne sont id
, name
, emp.dno
, emp.sal
, state
, emp.city
, Zip
.....
Maintenant, je veux remplacer les noms de colonnes qui ont '.'
en eux à '_'
Comme 'emp.dno'
à 'emp_dno'
Je voudrais le faire dynamiquement
Comment puis-je y parvenir dans pyspark?
Vous pouvez utiliser quelque chose de similaire à cette excellente solution de @ zero32 :
df.toDF(*(c.replace('.', '_') for c in df.columns))
alternativement:
from pyspark.sql.functions import col
replacements = {c:c.replace('.','_') for c in df.columns if '.' in c}
df.select([col(c).alias(replacements.get(c, c)) for c in df.columns])
Le dictionnaire replacement
ressemblerait alors à:
{'emp.city': 'emp_city', 'emp.dno': 'emp_dno', 'emp.sal': 'emp_sal'}
MISE À JOUR:
si j'ai un dataframe avec de l'espace dans les noms de colonnes, comment remplacer les deux
'.'
et espace avec'_'
import re
df.toDF(*(re.sub(r'[\.\s]+', '_', c) for c in df.columns))
A écrit une fonction facile et rapide à utiliser. Prendre plaisir! :)
def rename_cols(rename_df):
for column in rename_df.columns:
new_column = column.replace('.','_')
rename_df = rename_df.withColumnRenamed(column, new_column)
return rename_df
La façon la plus simple de procéder est la suivante:
Explication:
from pyspark.sql import functions as F (df .select(*[F.col(c).alias(c.replace('.',"_")) for c in df.columns]) .toPandas().head() )
J'espère que cela t'aides