Pyspark:如何在同一操作中估算 DataFrame 中的多个列?
Pyspark: How to impute multiple columns in DataFrame in the same action?
很抱歉有类似的问题 post 但这是同一代码的不同问题。我正在尝试估算所有这些列:
('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()
您实际上不需要遍历每一列。您可以一次计算所有均值并执行一次 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())
很抱歉有类似的问题 post 但这是同一代码的不同问题。我正在尝试估算所有这些列:
('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()
您实际上不需要遍历每一列。您可以一次计算所有均值并执行一次 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())