如何为python/pyspark数据帧中的所有列添加后缀和前缀

13 python apache-spark pyspark spark-dataframe

我在 pyspark 中有一个超过 100 列的数据框。我想要做的是对于所有我想在列名的开头和列名的末尾添加回勾号(`)的列名。

例如:

column name  is testing user. I want `testing user`
Run Code Online (Sandbox Code Playgroud)

在 pyspark/python 中是否有一种方法可以做到这一点。当我们应用代码时,它应该返回一个数据框。

小智 28

在 python 中使用列表理解。

from pyspark.sql import functions as F

df = ...

df_new = df.select([F.col(c).alias("`"+c+"`") for c in df.columns])
Run Code Online (Sandbox Code Playgroud)

此方法还为您提供了在 alias() 函数中添加自定义 Python 逻辑的选项,例如: "prefix_"+c+"_suffix" if c in list_of_cols_to_change else c


app*_*boy 8

添加前缀或后缀:

  1. 请参阅 df.columns 以获取列列表 ([col_1, col_2...])。这是我们要为其添加后缀/前缀列的数据框。
df.columns
Run Code Online (Sandbox Code Playgroud)
  1. 迭代上面的列表并创建另一个具有可在选择表达式中使用的别名的列列表。
from pyspark.sql.functions import col

select_list = [col(col_name).alias("prefix_" + col_name)  for col_name in df.columns]
Run Code Online (Sandbox Code Playgroud)
  1. 当使用内部选择时,不要忘记用星号(*)解压列表。我们可以将它分配回相同或不同的 df 来使用。
df.select(*select_list).show()
df = df.select(*select_list)
Run Code Online (Sandbox Code Playgroud)

df.columns 现在将返回新列(别名)的列表。


Pat*_* ML 5

如果您想向 pyspark 数据框中的多个列添加前缀或后缀,可以使用 for 循环和 .withColumnRenamed()。

例如,您可能喜欢:

def add_prefix(sdf, prefix):

      for c in sdf.columns:

          sdf = sdf.withColumnRenamed(c, '{}{}'.format(prefix, c))

      return sdf
Run Code Online (Sandbox Code Playgroud)

您可以根据需要修改 sdf.columns。


Pus*_*hkr 3

您可以withColumnRenamed结合使用数据框的方法na来创建新的数据框

df.na.withColumnRenamed('testing user', '`testing user`')
Run Code Online (Sandbox Code Playgroud)

编辑:假设您有列列表,您可以这样做 -

old = "First Last Age"
new = ["`"+field+"`" for field in old.split()]
df.rdd.toDF(new)
Run Code Online (Sandbox Code Playgroud)

输出 :

DataFrame[`First`: string, `Last`: string, `Age`: string]
Run Code Online (Sandbox Code Playgroud)