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
可能的问题及排查方向
未处理非标准形式的缺失值
fillna()仅能处理NaN/pd.NA类型的缺失值,如果原数据中存在空字符串("")、"N/A"、"na"这类隐性缺失值,fillna()不会识别处理,导致仍存在未清理的缺失情况。可先统一转换这类值为标准缺失值:# 读取数据后添加该行 clean_data = clean_data.replace(['', 'N/A', 'na'], pd.NA)部分列的填充规则不符合题目要求
需严格对照题目要求确认各列填充逻辑:- 比如
production_cost是否要求用均值而非中位数? assembly_time/top_speed是否要求用中位数而非均值?customer_score是否要求直接填充为中位数,而非均值后截断?
- 比如
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)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
相关产品推荐
相关产品推荐

