4. Pandas 入门:Series 与 DataFrame 基础、数据读取与写入、基本数据探索

Pandas 是 Python 数据科学生态中最核心的库之一,也是数据质量检测工作的基础操作平台。本章将系统讲解 Pandas 的两大核心数据结构——Series 与 DataFrame,以及如何从外部文件读取数据、将处理结果写入文件,并掌握初步的数据探索方法。这些技能是后续所有数据质量检测步骤的前提。

4.1 核心数据结构:Series 与 DataFrame

Pandas 提供了两种主要的数据容器:Series(一维带标签数组)和 DataFrame(二维表格型数据结构)。理解它们的区别与联系,是高效使用 Pandas 的第一步。

特性 Series DataFrame
维度 一维 二维
组成 索引 + 数据值 行索引 + 列索引 + 数据值
类比 带标签的列表或字典 电子表格或 SQL 表
每列数据类型 单一类型 每列可不同
常见用途 单列数据、时间序列 多变量数据集
关键理解:DataFrame 可以看作是由多个 Series 组成的字典,这些 Series 共享同一个行索引。在数据质量检测中,我们通常以 DataFrame 为操作主体,对每一列(Series)进行单独的质量评估。

4.1.1 创建 Series 与 DataFrame

以下代码展示了从不同数据源创建 Series 和 DataFrame 的常用方式:

import pandas as pd

# 从列表创建 Series
s1 = pd.Series([10, 20, 30, 40, 50], name='scores')
print(s1)

# 从字典创建 Series(键变为索引)
s2 = pd.Series({'a': 100, 'b': 200, 'c': 300})
print(s2)

# 从字典列表创建 DataFrame
data = [
    {'name': 'Alice', 'age': 25, 'city': 'Beijing'},
    {'name': 'Bob', 'age': 30, 'city': 'Shanghai'},
    {'name': 'Charlie', 'age': 35, 'city': 'Guangzhou'}
]
df = pd.DataFrame(data)
print(df)

# 从 NumPy 数组创建 DataFrame
import numpy as np
arr = np.random.randn(4, 3)
df_arr = pd.DataFrame(arr, columns=['A', 'B', 'C'])
print(df_arr)
输出示例(df):
      name  age       city
0    Alice   25    Beijing
1      Bob   30   Shanghai
2  Charlie   35  Guangzhou

4.2 数据读取与写入

Pandas 支持从多种文件格式读取数据,最常用的是 CSV 和 Excel。数据质量检测的第一步,往往就是从这些文件中加载原始数据。

4.2.1 常用读取函数

函数 文件格式 关键参数示例
pd.read_csv() CSV(逗号分隔) filepath, sep=',', encoding='utf-8', header=0
pd.read_excel() Excel(.xlsx/.xls) filepath, sheet_name=0, engine='openpyxl'
pd.read_json() JSON filepath, orient='records'
pd.read_sql() SQL 查询结果 sql, con=connection
# 读取 CSV 文件
df_csv = pd.read_csv('sales_data.csv', encoding='utf-8')

# 读取 Excel 文件的第一个工作表
df_excel = pd.read_excel('inventory.xlsx', sheet_name=0)

# 读取 JSON 文件
df_json = pd.read_json('user_log.json', orient='records')
常见陷阱:读取 CSV 时,如果文件包含中文字符,务必指定 encoding='utf-8' 或 encoding='gbk',否则会出现乱码。另外,header 参数控制是否将第一行作为列名,默认为 0(第一行作为列名),若文件无表头,需设置 header=None。

4.2.2 常用写入函数

处理完数据后,通常需要将结果保存到文件。写入函数与读取函数一一对应:

# 写入 CSV 文件
df.to_csv('cleaned_data.csv', index=False, encoding='utf-8-sig')

# 写入 Excel 文件
df.to_excel('output.xlsx', sheet_name='Sheet1', index=False)

# 写入 JSON 文件
df.to_json('result.json', orient='records', force_ascii=False)
参数说明:
- index=False:不写入行索引,避免输出多余的序号列。
- encoding='utf-8-sig':在 CSV 文件头部添加 BOM,确保 Excel 打开时中文正常显示。
- force_ascii=False:确保 JSON 中的中文字符不被转义为 \u 序列。

4.3 基本数据探索

数据加载完成后,在正式进行质量检测之前,需要对数据有一个全局性的了解。Pandas 提供了一系列便捷方法用于快速探索数据的基本特征。

4.3.1 查看数据概貌

以下方法可以帮助你快速了解数据的规模、类型和统计特征:

# 查看前 5 行(默认)
print(df.head())

# 查看后 3 行
print(df.tail(3))

# 查看数据形状(行数, 列数)
print(df.shape)

# 查看列名、非空计数和数据类型
print(df.info())

# 查看数值列的统计摘要
print(df.describe())
方法 作用 典型输出
head(n) 查看前 n 行数据 表格前 n 行
tail(n) 查看后 n 行数据 表格后 n 行
shape 返回 (行数, 列数) 元组 (1000, 15)
info() 列名、非空计数、数据类型 详细列信息列表
describe() 数值列的计数、均值、标准差、分位数 统计摘要表

4.3.2 数据探索流程

下图展示了从数据加载到初步探索的典型工作流:

数据加载与初步探索流程 加载数据 查看概貌 检查数据类型 统计摘要 缺失值初探 数据质量报告 说明:初步探索是数据质量检测的起点,帮助识别明显的结构问题和异常值。

4.3.3 常用探索性操作

除了上述方法,以下操作在数据质量检测的初步阶段也非常实用:

# 查看所有列名
print(df.columns.tolist())

# 查看每列的唯一值数量
print(df.nunique())

# 查看每列的缺失值数量
print(df.isnull().sum())

# 查看每列的数据类型
print(df.dtypes)

# 查看特定列的取值分布(适用于分类变量)
print(df['city'].value_counts())
实战技巧:在数据质量检测项目中,建议将 df.info() 和 df.isnull().sum() 的输出作为数据质量报告的初始部分。它们能快速暴露列类型错误、缺失值分布等常见问题,为后续的深度检测提供方向。

4.4 本章小结