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() 的输出作为数据质量报告的初始部分。它们能快速暴露列类型错误、缺失值分布等常见问题,为后续的深度检测提供方向。