适用练习:2.1.1 汽车燃油效率、2.1.2 低碳生活行为、2.1.3 信用评分、2.1.4 医疗研究、2.1.5 健康营养咨询 目标:零基础学员也能填对所有下划线,理解每一步在做什么


📖 一、填空题通用解题心法(速查表)

任务类型 典型填空位置 正确代码模板(直接照抄) 出现在哪个练习
📂 读取 CSV / Excel data = __________ pd.read_csv('文件名.csv')pd.read_excel('文件名.xlsx') 2.1.1~2.1.5
👀 查看前5行 print(__________) data.head() 2.1.1, 2.1.2
🔍 查看数据类型 print(data.dtypes) (已经给出,不需填空) 2.1.1, 2.1.4
📊 查看缺失值数量 print(__________.__________.__________) data.isnull().sum() 2.1.1, 2.1.4, 2.1.5
🗑️ 删除缺失值所在行 data = __________ data.dropna() 2.1.1, 2.1.2, 2.1.5
🔄 转换数据类型(异常值转NaN) data['col'] = __________(data['col'], errors='coerce') pd.to_numeric 2.1.1, 2.1.5
🗑️ 删除转换后产生的缺失值 data = __________ data.dropna() 2.1.1
📏 标准化(StandardScaler) data[numerical_features] = __________ scaler.fit_transform(data[numerical_features]) 2.1.1, 2.1.2
📐 归一化(MinMaxScaler) data[cols] = __________ scaler.fit_transform(data[cols]) 2.1.3, 2.1.4
🧹 删除重复值 data = __________ data.drop_duplicates() 2.1.2, 2.1.3, 2.1.4, 2.1.5
📈 箱线图 + IQR 异常值处理 Q1 = data.quantile(0.25) 见下方模板 2.1.3
🏷️ 特征选择 selected_features = [__________] 列名列表 2.1.1, 2.1.2
🎯 定义 X 和 y X = __________ y = __________ data[selected_features]data['mpg'] 2.1.1, 2.1.2, 2.1.3
✂️ 划分训练/测试集 X_train, X_test, y_train, y_test = __________(__________, random_state=42) train_test_split(X, y, test_size=0.2) 2.1.1, 2.1.2, 2.1.3
💾 保存 CSV(无索引) __________('文件名.csv', __________) data.to_csv('2.1.x_cleaned_data.csv', index=False) 全部
📅 日期格式转换 data['列'] = pd.to_datetime(data['列']) (已给出) 2.1.4
✏️ 修改列名 __________.rename(columns={'旧名':'新名'}, inplace=True) data.rename 2.1.4
➕ 增加新列(日期差) data['新列'] = (data['日期2'] - data['日期1']).dt.days 见模板 2.1.4
🏷️ 标签编码(LabelEncoder) data['列'] = label_encoder.fit_transform(data['列']) 见模板 2.1.5
🥧 绘制饼图 plt.pie(..., autopct='%1.1f%%') 见模板 2.1.5

🧠 二、每个函数的“人话解释”(生活类比 + 示例)

函数 / 方法 生活类比 代码示例(小白版)
pd.read_csv('file.csv') 打开一个 CSV 表格文件,把内容搬进 Python。 data = pd.read_csv('auto-mpg.csv')
data.head() 瞄一眼表格的前 5 行,确认没读错。 print(data.head())
data.isnull().sum() 数一数每一列有多少个空单元格。 print(data.isnull().sum())
data.dropna() 扔掉任何一行里有一个空格的整行作业。 data = data.dropna()
pd.to_numeric(col, errors='coerce') 把“马力”列里的问号 ? 变成 NaN(无法转换的就变成缺失值)。 data['horsepower'] = pd.to_numeric(data['horsepower'], errors='coerce')
StandardScaler() 标准化:让数据的平均值为 0,标准差为 1,不同单位可以比较。 scaler.fit_transform(data[features])
MinMaxScaler() 归一化:把所有数据压缩到 [0,1] 区间。 scaler.fit_transform(data[cols])
data.drop_duplicates() 删除完全重复的行(就像删掉一模一样的两页作业)。 data = data.drop_duplicates()
data.quantile(0.25) 计算第一四分位数(排在 25% 位置的那个数)。 Q1 = data['age'].quantile(0.25)
IQR 异常值删除 找出小于 Q1-1.5IQR 或大于 Q3+1.5IQR 的值,并删掉。 data_cleaned = data[~((data < lower) | (data > upper)).any(axis=1)]
train_test_split(X, y, test_size=0.2) 把数据分成训练集(80%)和测试集(20%),就像把复习资料分成平时练习和模拟考。 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
pd.to_datetime() 把“2023/01/15”这种乱七八糟的日期统一成标准格式。 data['就诊日期'] = pd.to_datetime(data['就诊日期'])
data.rename(columns={'旧':'新'}, inplace=True) 把列名“病人ID”改成“患者ID”。 data.rename(columns={'病人ID':'患者ID'}, inplace=True)
(date2 - date1).dt.days 计算两个日期相差多少天。 data['诊断延迟'] = (data['诊断日期'] - data['就诊日期']).dt.days
LabelEncoder() 把文字类别(如“经常运动”、“偶尔运动”)变成数字(0,1,2)。 le.fit_transform(data['健身水平'])
plt.pie() 画饼图,显示各部分比例。 plt.pie(counts, autopct='%1.1f%%')

⚠️ 三、常见错误 & 调试技巧(小白救急版)

错误现象 最可能的原因 解决办法 幽默提醒
FileNotFoundError 文件名或路径不对 检查文件名大小写、扩展名,或使用绝对路径 Python 找不到文件就像你喊“老王”但他叫“王老五” 😅
KeyError: 'horsepower' 列名写错(大小写、空格) 运行 print(data.columns) 查看真实列名 表格里是 Horsepower,你写 horsepower – 大小写敏感!
pd.to_numeric 后全是 NaN 该列全是非数字(如全是问号) 先检查 data['col'].unique(),可能需要手动替换 你不能把“三个问号”变成数字
ValueError: could not convert string to float 类型转换遇到非数字字符 使用 errors='coerce' 转成 NaN,然后删除 就像把“苹果”变成数字 – 办不到
IQR 删除异常值后数据变空 异常值范围太宽或数据量小 检查 Q1Q3 是否合理,或者放宽倍数(如改为 3) 你可能把整个班都当成“异常”开除了
标准化/归一化后全是 NaN 某列所有值相同,标准差为 0 删除该列或检查数据是否有效 全班都考 0 分,没法算标准差
train_test_split 报错 X 和 y 行数不一致 确保 X 和 y 来自同一个 DataFrame 且没有缺失值 你不能拿 10 个人的数学成绩去匹配 8 个人的语文成绩
保存 CSV 后多了一列 Unnamed: 0 保存时没有写 index=False to_csv('file.csv', index=False) 不要给表格自动编页码
pd.read_excel 报错 Missing optional dependency 'openpyxl' 没有安装 Excel 读取引擎 pip install openpyxl 想打开 Excel 得先装个开瓶器

调试三板斧

  1. 打印形状print(data.shape) – 看看还有多少行。

  2. 打印列名print(data.columns) – 确认名字没写错。

  3. 打印前几行print(data.head()) – 肉眼检查数据是否合理。


🎉 结语

恭喜你!你已经掌握了 2.1 系列所有数据清洗和预处理 的填空套路。 记住:数据预处理 = 读数据 → 查缺失 → 删空行 → 转类型 → 删异常 → 标准化/归一化 → 删重复 → 选特征 → 切分 → 保存。 这个流程就像做饭:洗菜 → 切菜 → 下锅 → 调味 → 装盘。🍳

通关咒语

读看删转删,异常 IQR 干; 标准化归一化,重复全删完; 选特切分存,考试不犯难! 🧙‍♂️

祝你顺利通过人工智能训练师考试! 🚀