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,以便后续进行时间窗口分析。
数据加载与初探流程 数据源 加载函数 DataFrame head() 预览 info() 摘要 describe() 统计 数据类型检查与转换 (dtypes / astype / to_datetime) 数据初探报告 CSV / Excel 文件输入

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?

通过以上步骤,我们已完成了对数据集的全面初探。接下来,将基于这些初步认识,进入特征回放与对比分析的核心环节。