2. 数据加载与初探:使用 Pandas 加载 CSV/Excel 数据、head()/info()/describe() 方法、数据类型概览
数据加载是特征回放分析的第一步。本章将系统讲解如何使用 Pandas 从 CSV 和 Excel 文件中读取数据,并通过三个核心方法快速建立对数据集的初步认知。掌握这些基础操作,是后续进行特征工程与对比分析的前提。
2.1 使用 Pandas 加载数据文件
Pandas 提供了 read_csv() 和 read_excel() 两个最常用的数据加载函数。以下为基本用法与关键参数对比:
| 函数 | 文件格式 | 关键参数 | 说明 |
|---|---|---|---|
pd.read_csv() |
.csv, .txt | filepath_or_buffer, sep, encoding, header |
默认分隔符为逗号,可通过 sep 指定其他分隔符 |
pd.read_excel() |
.xlsx, .xls | io, sheet_name, header, usecols |
需安装 openpyxl 或 xlrd 引擎 |
实战提示: 加载 CSV 时,若文件包含中文字符,建议设置
encoding='utf-8' 或 encoding='gbk',避免乱码。Excel 文件加载时,sheet_name=None 可一次性读取所有工作表。
import pandas as pd
# 加载 CSV 文件
df_csv = pd.read_csv('customer_data.csv', encoding='utf-8')
# 加载 Excel 文件(指定工作表)
df_excel = pd.read_excel('sales_report.xlsx', sheet_name='Sheet1')
# 加载 Excel 文件(指定列范围)
df_excel_sub = pd.read_excel('sales_report.xlsx', sheet_name='Sheet1', usecols='A:C')
2.2 数据初探三剑客:head()、info()、describe()
加载数据后,应立刻使用以下三个方法对数据集进行快速扫描,形成整体印象。
2.2.1 head() —— 预览数据样本
head(n) 默认返回前 5 行数据,用于观察字段名称、数据格式和典型取值。配合 tail(n) 可查看数据尾部,检查是否有异常截断。
# 查看前 5 行
print(df_csv.head())
# 查看后 3 行
print(df_csv.tail(3))
2.2.2 info() —— 获取数据摘要
info() 输出 DataFrame 的完整摘要,包括行数、列数、每列的非空计数和数据类型。这是判断缺失值与数据类型是否正确的第一道关卡。
# 查看数据摘要
df_csv.info()
输出示例:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1000 entries, 0 to 999
Data columns (total 8 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 user_id 1000 non-null int64
1 age 1000 non-null int64
2 income 980 non-null float64
3 gender 1000 non-null object
4 region 1000 non-null object
5 purchase 950 non-null float64
6 signup_date 1000 non-null object
7 score 1000 non-null int64
dtypes: float64(2), int64(3), object(3)
memory usage: 62.6 KB
注意: 若某列
Non-Null Count 小于总行数,说明存在缺失值。若 Dtype 为 object 但实际应为数值或日期,需在后续步骤中进行类型转换。
2.2.3 describe() —— 统计描述
describe() 对数值型列自动计算计数、均值、标准差、最小值、四分位数和最大值。对于分类型数据,可设置 include='object' 查看频次统计。
# 数值列统计描述
print(df_csv.describe())
# 分类列统计描述
print(df_csv.describe(include='object'))
数值列输出示例:
| 统计量 | age | income | score |
|---|---|---|---|
| count | 1000.0 | 980.0 | 1000.0 |
| mean | 35.42 | 58200.50 | 72.15 |
| std | 12.08 | 21300.30 | 15.42 |
| min | 18.00 | 12000.00 | 30.00 |
| 25% | 25.00 | 41000.00 | 62.00 |
| 50% | 34.00 | 56000.00 | 74.00 |
| 75% | 44.00 | 72000.00 | 84.00 |
| max | 65.00 | 150000.00 | 99.00 |
2.3 数据类型概览与转换
Pandas 中常见的数据类型包括 int64、float64、object(字符串)、datetime64、category 等。通过 dtypes 属性可查看每列类型,使用 astype() 或 pd.to_datetime() 进行类型转换。
# 查看所有列的数据类型
print(df_csv.dtypes)
# 将 'signup_date' 列转换为日期类型
df_csv['signup_date'] = pd.to_datetime(df_csv['signup_date'])
# 将 'gender' 列转换为分类类型
df_csv['gender'] = df_csv['gender'].astype('category')
# 转换后再次确认
print(df_csv.dtypes)
最佳实践: 在特征回放分析中,建议将 ID 列(如 user_id)转换为
object 或 category,避免被误当作数值参与统计计算。日期列务必转换为 datetime64,以便后续进行时间窗口分析。
2.4 综合实战:加载并初探客户数据集
以下代码演示了完整的加载与初探流程,包含异常处理与类型转换:
import pandas as pd
# 1. 加载数据
try:
df = pd.read_csv('customer_data.csv', encoding='utf-8')
print("数据加载成功,共 {} 行 {} 列".format(df.shape[0], df.shape[1]))
except FileNotFoundError:
print("文件未找到,请检查路径")
exit()
# 2. 预览数据
print("\n===== 前5行数据 =====")
print(df.head())
# 3. 数据摘要
print("\n===== 数据摘要 =====")
df.info()
# 4. 统计描述
print("\n===== 数值列统计 =====")
print(df.describe())
# 5. 类型检查与转换
print("\n===== 原始数据类型 =====")
print(df.dtypes)
# 转换日期列
if 'signup_date' in df.columns:
df['signup_date'] = pd.to_datetime(df['signup_date'], errors='coerce')
print("\n'signup_date' 已转换为 datetime 类型")
# 转换分类列
categorical_cols = ['gender', 'region']
for col in categorical_cols:
if col in df.columns:
df[col] = df[col].astype('category')
print(f"'{col}' 已转换为 category 类型")
# 6. 最终确认
print("\n===== 转换后数据类型 =====")
print(df.dtypes)
关键检查清单:
- 行数与预期一致?是否存在空行被误读?
- 每列的非空计数是否合理?缺失值是否集中在特定列?
- 数值列的均值、标准差是否在合理范围?是否存在异常极值?
- 日期列是否成功转换为
datetime64?分类列是否已标记为category?
通过以上步骤,我们已完成了对数据集的全面初探。接下来,将基于这些初步认识,进入特征回放与对比分析的核心环节。