我正在尝试从数据框中的某些列中删除第一个字符
df_rotina_pro
。但我收到以下错误:
列不可迭代。
代码:
transformed_df = (
df_rotina_pro.withColumn(
"cprodlim", F.substring(df_rotina_pro["cprodlim"], 2, F.length(["cprodlim"]))
)
.withColumn(
"col1", F.substring(df_rotina_pro["col1"], 2, F.length(df_rotina_pro["col1"]))
)
.withColumn(
"col2", F.substring(df_rotina_pro["col2"], 2, F.length(df_rotina_pro["col2"]))
)
.withColumn(
"col3", F.substring(df_rotina_pro["col3"], 2, F.length(df_rotina_pro["col3"]))
)
.withColumn(
"col4", F.substring(df_rotina_pro["col4"], 2, F.length(df_rotina_pro["col4"]))
)
.withColumn(
"col5", F.substring(df_rotina_pro["col5"], 2, F.length(df_rotina_pro["col5"]))
)
.withColumn(
"col6", F.substring(df_rotina_pro["col6"], 2, F.length(df_rotina_pro["col6"]))
)
.withColumn(
"col7", F.substring(df_rotina_pro["col7"], 2, F.length(df_rotina_pro["col7"]))
)
.withColumn(
"col8", F.substring(df_rotina_pro["col8"], 2, F.length(df_rotina_pro["col8"]))
)
.withColumn(
"col9", F.substring(df_rotina_pro["col9"], 2, F.length(df_rotina_pro["col9"]))
)
)
请帮我解决这个问题,因为我尝试了很多其他方法,但没有一个有效。
你可以尝试使用下面的代码吗:
from pyspark.sql import functions as F
transformed_df = (
df_rotina_pro
.withColumn("cprodlim", F.expr("substring(cprodlim, 2, length(cprodlim) - 1)"))
.withColumn("col1", F.expr("substring(col1, 2, length(col1) - 1)"))
.withColumn("col2", F.expr("substring(col2, 2, length(col2) - 1)"))
.withColumn("col3", F.expr("substring(col3, 2, length(col3) - 1)"))
.withColumn("col4", F.expr("substring(col4, 2, length(col4) - 1)"))
.withColumn("col5", F.expr("substring(col5, 2, length(col5) - 1)"))
.withColumn("col6", F.expr("substring(col6, 2, length(col6) - 1)"))
.withColumn("col7", F.expr("substring(col7, 2, length(col7) - 1)"))
.withColumn("col8", F.expr("substring(col8, 2, length(col8) - 1)"))
.withColumn("col9", F.expr("substring(col9, 2, length(col9) - 1)"))
)
F.expr 用于直接将 SQL 表达式传递到 PySpark 列。