Use*_*345 8 special-characters dataframe apache-spark pyspark
我在pyspark中有一个有15列的数据框.
列名是id
,name
,emp.dno
,emp.sal
,state
,emp.city
,zip
.....
现在我想,以取代有列名'.'
在他们'_'
像'emp.dno'
到'emp_dno'
我想动态地做
我如何在pyspark实现这一目标?
Max*_*axU 20
您可以使用与@ zero323这个伟大解决方案类似的东西:
df.toDF(*(c.replace('.', '_') for c in df.columns))
Run Code Online (Sandbox Code Playgroud)
或者:
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])
Run Code Online (Sandbox Code Playgroud)
然后replacement
字典看起来像:
{'emp.city': 'emp_city', 'emp.dno': 'emp_dno', 'emp.sal': 'emp_sal'}
Run Code Online (Sandbox Code Playgroud)
更新:
如果我在列名中有空格的数据框,那么如何用空格替换
'.'
空格和空格'_'
import re
df.toDF(*(re.sub(r'[\.\s]+', '_', c) for c in df.columns))
Run Code Online (Sandbox Code Playgroud)
编写了一个简单快速的函数供您使用。享受!:)
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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
11518 次 |
最近记录: |