You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Datacamp Python Associate考试Task1缺失值处理未通过排查请求

Datacamp Python Associate考试(VoltBike Innovations实践题)缺失值处理未通过排查

问题描述

正在完成Datacamp的Python Associate考试VoltBike Innovations实践题,提交后仅Task1的「识别并替换缺失值」项未通过,其余项均已通过,请求排查原因。

我的实现代码

import pandas as pd

clean_data = pd.read_csv('ebike_data.csv')

clean_data['bike_type'] = clean_data['bike_type'].fillna('standard') 

clean_data['frame_material'] = clean_data['frame_material'].fillna('unknown') 
clean_data['frame_material'] = clean_data['frame_material'].str.lower() 

clean_data['production_cost'] = clean_data['production_cost'].fillna(clean_data['production_cost'].median()).astype(float)

clean_data['assembly_time'] = clean_data['assembly_time'].fillna(clean_data['assembly_time'].mean()).astype(int)

clean_data['top_speed'] = clean_data['top_speed'].fillna(clean_data['top_speed'].mean()).astype(int)

clean_data['battery_type'] = clean_data['battery_type'].fillna('other') 
clean_data['battery_type'] = clean_data['battery_type'].replace({'-':'other', 'liotherion': 'li-ion'})

clean_data['customer_score'] = clean_data['customer_score'].fillna(clean_data['customer_score'].mean()).clip(lower=1, upper=10).astype(int)

clean_data['motor_power'] = clean_data['motor_power'].str.replace('W','').astype(float)
clean_data['motor_power'] = clean_data['motor_power'].fillna(clean_data['motor_power'].median()).astype(int)

print(clean_data.info())
print(clean_data.isna().sum())

输出结果

RangeIndex: 2000 entries, 0 to 1999
Data columns (total 8 columns):
 #   Column           Non-Null Count  Dtype  
---  ------           --------------  -----  
 0   bike_type        2000 non-null   object 
 1   frame_material   2000 non-null   object 
 2   production_cost  2000 non-null   float64
 3   assembly_time    2000 non-null   int64  
 4   top_speed        2000 non-null   int64  
 5   battery_type     2000 non-null   object 
 6   motor_power      2000 non-null   int64  
 7   customer_score   2000 non-null   int64  
dtypes: float64(1), int64(4), object(3)
memory usage: 125.1+ KB
None
bike_type          0
frame_material     0
production_cost    0
assembly_time      0
top_speed          0
battery_type       0
motor_power        0
customer_score     0
dtype: int64

提交反馈

所有必要数据已创建且包含所需列 - CHECK
Task 1: 识别并替换缺失值 - **NOT CHECKED**
Task 1: 转换数据类型 - CHECK
Task 1: 通过字符串处理清理分类和文本数据 - CHECK

可能的问题及排查方向

  1. 未处理非标准形式的缺失值
    fillna()仅能处理NaN/pd.NA类型的缺失值,如果原数据中存在空字符串("")、"N/A"、"na"这类隐性缺失值,fillna()不会识别处理,导致仍存在未清理的缺失情况。可先统一转换这类值为标准缺失值:

    # 读取数据后添加该行
    clean_data = clean_data.replace(['', 'N/A', 'na'], pd.NA)
    
  2. 部分列的填充规则不符合题目要求
    需严格对照题目要求确认各列填充逻辑:

    • 比如production_cost是否要求用均值而非中位数?
    • assembly_time/top_speed是否要求用中位数而非均值?
    • customer_score是否要求直接填充为中位数,而非均值后截断?
  3. motor_power的异常值覆盖不全
    如果原数据中motor_power存在"missing"、"-"这类非NaN的缺失标记,当前代码未提前处理,会导致str.replace()后转为NaN,虽然后续填充了中位数,但可能不符合题目对缺失值识别的要求,可提前处理:

    clean_data['motor_power'] = clean_data['motor_power'].replace(['missing', '-'], pd.NA)
    clean_data['motor_power'] = clean_data['motor_power'].str.replace('W','').astype(float)
    clean_data['motor_power'] = clean_data['motor_power'].fillna(clean_data['motor_power'].median()).astype(int)
    
  4. battery_type的缺失值替换不彻底
    除了NaN和"-",可能还有"none"、"unknown"这类缺失值未被替换为"other",需补充替换规则:

    clean_data['battery_type'] = clean_data['battery_type'].replace({'-':'other', 'liotherion': 'li-ion', 'none':'other', 'unknown':'other'})
    

内容的提问来源于stack exchange,提问作者Alvaro Souza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 20:40:21