【问题标题】:Pyspark: How to impute multiple columns in DataFrame in the same action?Pyspark:如何在同一操作中估算 DataFrame 中的多个列?
【发布时间】:2021-02-04 03:32:52
【问题描述】:

对不起,类似的帖子,但这是同一代码的不同问题。我正在尝试估算所有这些列:

('exact_age','lnght_of_resd','acct_tenure_mnth_nbr','acct_ttce_mnth_nbr','tot_promo_amt', 'tot_rev_amt','int_base_pkg_speed','int_mx_elgbl_speed') 

使用下面的代码,但只计算第一列。我猜它与first() 函数有关。但是,我不知道如何修改代码,以便它可以遍历所有列。当我运行此代码时,exact_age 被正确估算,但其他代码不正确。任何帮助表示赞赏。谢谢

removeAllDF = df_data.na.drop()
imputeDF = df_data['exact_age','lnght_of_resd','acct_tenure_mnth_nbr','acct_ttce_mnth_nbr','tot_promo_amt','tot_rev_amt','int_base_pkg_speed','int_mx_elgbl_speed']
for x in imputeDF.columns:
    meanValue = removeAllDF.agg(avg(x)).first()[0]
    print(x, meanValue)
    df_data = df_data.na.fill(meanValue, (x))

df_data.show()

【问题讨论】:

  • 当我尝试时,这似乎有效。也许这是一个数据问题。你看到了什么错误?

标签: apache-spark pyspark apache-spark-sql pyspark-dataframes


【解决方案1】:

您实际上不需要遍历每一列。您可以一次计算所有均值并进行一次df_data.na.fill 调用:

impute_cols = [
    'exact_age', 'lnght_of_resd', 'acct_tenure_mnth_nbr',
    'acct_ttce_mnth_nbr', 'tot_promo_amt', 'tot_rev_amt',
    'int_base_pkg_speed', 'int_mx_elgbl_speed'
]

mean_df = df_data.na.drop().agg(*[avg(c).alias(c) for c in impute_cols])

df_data = df_data.na.fill(mean_df.first().asDict())

【讨论】:

  • 谢谢。我修改了最后一行,让它为我工作 '''df_data = df_data.na.fill(mean_df.first().asDict()) '''
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-03
  • 2020-07-09
相关资源
最近更新 更多