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

时间:2017-04-01 17:46:25

标签: python apache-spark pyspark spark-dataframe

我在pyspark中有一个包含100多列的数据框。我想要做的是所有列名称我想在列名称的开头和列名的末尾添加回标记(`)。

例如:

Array

有没有一种方法可以在pyspark / python中执行此操作。当我们应用代码时,它应该返回一个数据框。

5 个答案:

答案 0 :(得分:3)

在python中使用列表理解。

from pyspark.sql import functions as F

df = ...

df_new = df.select([F.col(c).alias("`"+c+"`") for c in df.columns])

此方法还使您可以选择在alias()函数内添加自定义python逻辑,例如:"prefix_"+c+"_suffix" if c in list_of_cols_to_change else c

答案 1 :(得分:2)

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

df.na.withColumnRenamed('testing user', '`testing user`')

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

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

输出:

DataFrame[`First`: string, `Last`: string, `Age`: string]

答案 2 :(得分:1)

我有一个数据框,我重复了两次,然后将其连接在一起。由于两者具有相同的列名,因此我使用了:

df = reduce(lambda df, idx: df.withColumnRenamed(list(df.schema.names)[idx],
                                                 list(df.schema.names)[idx] + '_prec'),
            range(len(list(df.schema.names))),
            df)

数据框中的每个列都带有'_prec'后缀,这使我可以做些甜蜜的事情

答案 3 :(得分:1)

要添加前缀或后缀:

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

select_list = [col(col_name).alias("prefix_" + col_name)  for col_name in df.columns]
  1. 使用内部选择时,请不要忘记使用星号(*)来 解包 。我们可以将其分配回相同或不同的df以供使用。
df.select(*select_list).show()
df = df.select(*select_list)

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

答案 4 :(得分:0)

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

例如,您可能会喜欢:

def add_prefix(sdf, prefix):

      for c in sdf.columns:

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

      return sdf

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