3、数据准备基础:Pandas读取CSV/Excel、数据概览与缺失值初步处理

在分群评分沙盘项目中,数据准备是后续所有分析与建模的基石。本章将系统讲解如何使用 Pandas 库完成数据加载、初步探查以及缺失值的基础处理,确保数据进入分析流程前具备良好的质量与结构。

3.1 Pandas 读取 CSV 与 Excel 文件

Pandas 提供了 read_csv() 和 read_excel() 两个核心函数,分别用于读取逗号分隔值文件和 Excel 工作簿。以下为常用参数说明:

函数参数说明示例值
read_csv()filepath_or_buffer文件路径或 URL'./data/scores.csv'
sep分隔符,默认逗号',' 或 '\t'
encoding文件编码'utf-8' 或 'gbk'
header列名所在行号,默认 00 或 None
read_excel()io文件路径或类文件对象'./data/scores.xlsx'
sheet_name工作表名称或索引'Sheet1' 或 0
dtype指定列数据类型{'user_id': str}
编码提示: 当读取包含中文的 CSV 文件时,若遇到 UnicodeDecodeError,可尝试将 encoding 参数改为 'gbk' 或 'gb18030'。
import pandas as pd

# 读取 CSV 文件
df_csv = pd.read_csv('scores.csv', encoding='utf-8')

# 读取 Excel 文件
df_excel = pd.read_excel('scores.xlsx', sheet_name='用户评分')

print('CSV 数据加载完成,形状:', df_csv.shape)
print('Excel 数据加载完成,形状:', df_excel.shape)

3.2 数据概览:head / info / describe

加载数据后,应第一时间通过三个核心方法了解数据全貌:

  • head(n):预览前 n 行(默认 5 行),快速检查列名与数据样例。
  • info():输出每列的非空计数、数据类型及内存占用,是发现缺失值与类型异常的利器。
  • describe():对数值列生成描述性统计(计数、均值、标准差、四分位数等)。
# 预览前 5 行
print('前 5 行数据:')
print(df_csv.head())

# 数据信息概览
print('\n数据信息:')
df_csv.info()

# 数值列统计描述
print('\n描述性统计:')
print(df_csv.describe())
实战要点: 在分群评分场景中,info() 能快速暴露哪些评分列存在缺失,describe() 则帮助判断评分分布是否偏斜,为后续分群提供依据。

3.3 缺失值初步处理

缺失值在真实数据中几乎不可避免。Pandas 使用 NaN(Not a Number)标记缺失。初步处理通常包含以下步骤:

  1. 检测缺失:isnull() 或 isna() 返回布尔 DataFrame,sum() 汇总每列缺失数量。
  2. 可视化缺失比例:计算缺失率,辅助决策处理策略。
  3. 基础处理:删除缺失行(dropna())或填充缺失值(fillna())。
# 检测缺失值
missing_count = df_csv.isnull().sum()
missing_ratio = missing_count / len(df_csv) * 100

print('每列缺失数量:')
print(missing_count)
print('\n每列缺失比例(%):')
print(missing_ratio)

# 删除包含缺失的行(谨慎使用)
df_clean = df_csv.dropna()

# 用均值填充数值列缺失
df_filled = df_csv.fillna(df_csv.mean(numeric_only=True))
注意: 直接使用 dropna() 可能丢失大量样本,尤其在评分数据稀疏时。建议先评估缺失比例,再选择填充或插值策略。

3.4 数据准备流程总览

以下 SVG 图展示了从文件读取到缺失值初步处理的完整数据准备链路:

数据准备基础流程 数据源 CSV / Excel Pandas 读取 read_csv / read_excel 数据概览 head / info / describe 缺失检测 isnull / sum / 比例 缺失处理 dropna / fillna 干净数据 进入分析流程 缺失比例 < 5% 可考虑删除行;缺失比例较高时建议填充或使用模型预测填补

3.5 常见问题与避坑指南

问题场景可能原因解决方案
读取 CSV 报编码错误文件编码与指定编码不匹配尝试 encoding='gbk' 或 encoding='utf-8-sig'
Excel 读取后数值列显示为对象类型单元格包含混合类型或空值使用 dtype 参数强制指定类型,或事后 pd.to_numeric()
info() 显示某列非空数远少于行数该列存在大量缺失评估缺失比例,决定填充或删除
describe() 只显示部分列非数值列被自动排除使用 include='all' 查看所有列统计
最佳实践: 在分群评分沙盘中,建议先使用 info() 确认每列数据类型是否正确,再用 describe() 观察评分分布,最后根据缺失比例决定处理方式。切勿跳过概览步骤直接建模。