自定义DataFrame清洗函数运行后未生成df_cleaned的原因咨询
问题原因
- 函数无返回值:你在函数内部完成
df_cleaned拼接后没有用return语句输出结果,外部调用函数后自然无法拿到清洗后的数据集。 - 循环追加逻辑错误:代码中写的是
df_cleaned.append(df_cleaned),是把存储结果的列表本身追加到了列表里,而非每次生成的单列清洗结果df_clean_all,会导致后续pd.concat结果完全不符合预期。 - 存在不必要的副作用:循环中每次都会给传入的
data_set新增new列,会修改你外部的原始df_data数据。
修正后可运行的代码
import pandas as pd def cleaning_data(data_set): df_cleaned = [] # 遍历从第5列开始的所有列,将变量名从index改为col避免和索引歧义 for col in data_set.columns[4:]: # 直接生成当前列的清洗结果,无需修改原数据集 ser_clean = data_set[col].where( data_set[col].between(data_set[col].quantile(0.05), data_set[col].quantile(0.95)) ) # 剔除异常值后用均值填充空值 ser_clean = ser_clean.fillna(ser_clean.mean()) df_cleaned.append(ser_clean) # 横向拼接所有清洗后的列 df_cleaned = pd.concat(df_cleaned, axis=1) # 返回清洗后的结果 return df_cleaned # 调用时用变量接收返回值即可得到预期的df_cleaned df_cleaned = cleaning_data(df_data)
内容的提问来源于stack exchange,提问作者Dino
相关产品推荐
相关产品推荐

