3. Pandas 基础:Series 与 DataFrame 的创建、索引与切片、数据读取
Pandas 是 Python 数据分析的核心库,它提供了两种主要的数据结构:Series(一维标签数组)和 DataFrame(二维表格数据结构)。本章将系统讲解这两种结构的创建、索引与切片操作,以及从 CSV、Excel、JSON 等常见文件格式中读取数据的方法。
课前准备: 确保已安装 Pandas 库(
pip install pandas openpyxl),并准备好一个示例 CSV 文件或使用 Pandas 内置数据集。
3.1 Series 的创建与基本操作
Series 是一种类似于一维数组的对象,它由一组数据(各种 NumPy 数据类型)以及一组与之相关的数据标签(即索引)组成。
3.1.1 创建 Series
可以通过列表、NumPy 数组或字典来创建 Series:
import pandas as pd
import numpy as np
# 从列表创建,默认索引为 0,1,2,...
s1 = pd.Series([10, 20, 30, 40])
print(s1)
# 指定索引
s2 = pd.Series([85, 92, 78, 96], index=['张三', '李四', '王五', '赵六'])
print(s2)
# 从字典创建,键自动成为索引
s3 = pd.Series({'CPU': 78.5, '内存': 92.3, '磁盘': 65.1})
print(s3)
关键点: Series 的索引(index)和数据(values)是两个核心属性,可通过
s.index 和 s.values 分别获取。
3.1.2 Series 的索引与切片
Series 支持位置索引和标签索引两种方式:
# 位置索引(类似列表)
print(s2[0]) # 输出:85
print(s2[1:3]) # 切片,输出索引1和2的数据
# 标签索引
print(s2['张三']) # 输出:85
print(s2[['张三', '王五']]) # 通过标签列表获取多个值
# 使用 .iloc(位置)和 .loc(标签)显式索引
print(s2.iloc[0]) # 位置索引
print(s2.loc['张三']) # 标签索引
注意: 当索引为整数时,
s[0] 默认使用标签索引,容易混淆。建议始终使用 .iloc 和 .loc 进行显式索引。
3.2 DataFrame 的创建与基本操作
DataFrame 是 Pandas 中最常用的数据结构,它是一个表格型的数据结构,包含一组有序的列,每列可以是不同的值类型(数值、字符串、布尔值等)。
3.2.1 创建 DataFrame
可以通过字典、列表、NumPy 数组或从文件读取来创建 DataFrame:
# 从字典创建(键为列名,值为列数据)
data = {
'姓名': ['张三', '李四', '王五', '赵六'],
'年龄': [25, 30, 28, 35],
'部门': ['技术部', '市场部', '技术部', '财务部'],
'薪资': [15000, 12000, 18000, 16000]
}
df = pd.DataFrame(data)
print(df)
# 指定行索引
df2 = pd.DataFrame(data, index=['A', 'B', 'C', 'D'])
print(df2)
# 从 NumPy 数组创建
arr = np.random.randn(4, 3)
df3 = pd.DataFrame(arr, columns=['特征1', '特征2', '特征3'])
print(df3)
3.2.2 DataFrame 的索引与切片
DataFrame 支持列索引、行索引以及混合索引:
# 列索引:获取单列或多列
print(df['姓名']) # 返回 Series
print(df[['姓名', '薪资']]) # 返回 DataFrame
# 行索引:使用 .loc(标签)和 .iloc(位置)
print(df.loc[0]) # 获取第0行(标签索引)
print(df.iloc[0]) # 获取第0行(位置索引)
print(df.loc[0:2]) # 切片行(包含结束)
print(df.iloc[0:2]) # 切片行(不包含结束)
# 混合索引:同时选择行和列
print(df.loc[0:2, ['姓名', '薪资']])
print(df.iloc[0:2, 0:2])
# 条件索引(布尔索引)
print(df[df['年龄'] > 28])
最佳实践: 在数据分析中,
.loc 和 .iloc 是最推荐的索引方式,它们语义清晰,能避免歧义。
3.3 数据读取:CSV / Excel / JSON
Pandas 提供了强大的 I/O 功能,可以轻松读取各种格式的数据文件。以下是三种最常用格式的读取方法:
| 文件格式 | 读取函数 | 常用参数 | 典型应用场景 |
|---|---|---|---|
| CSV | pd.read_csv() |
filepath, sep, encoding, header, index_col |
日志数据、导出表格、KPI 指标数据 |
| Excel | pd.read_excel() |
filepath, sheet_name, header, usecols |
财务报表、业务报表、配置清单 |
| JSON | pd.read_json() |
filepath, orient, lines |
API 返回数据、NoSQL 导出、配置数据 |
3.3.1 读取 CSV 文件
# 基本读取
df_csv = pd.read_csv('data/kpi_data.csv')
print(df_csv.head()) # 查看前5行
# 指定分隔符和编码
df_csv2 = pd.read_csv('data/kpi_data.tsv', sep='\t', encoding='utf-8')
# 指定索引列
df_csv3 = pd.read_csv('data/kpi_data.csv', index_col='日期')
# 只读取部分列
df_csv4 = pd.read_csv('data/kpi_data.csv', usecols=['日期', 'CPU使用率', '内存使用率'])
3.3.2 读取 Excel 文件
# 读取默认工作表(第一个)
df_excel = pd.read_excel('data/kpi_report.xlsx')
print(df_excel.head())
# 指定工作表名称
df_excel2 = pd.read_excel('data/kpi_report.xlsx', sheet_name='月度汇总')
# 指定读取范围
df_excel3 = pd.read_excel('data/kpi_report.xlsx', sheet_name='Sheet1', usecols='A:C')
3.3.3 读取 JSON 文件
# 读取标准 JSON 文件
df_json = pd.read_json('data/kpi_data.json')
print(df_json.head())
# 读取行分隔的 JSON(每行一个 JSON 对象)
df_json2 = pd.read_json('data/kpi_data_lines.json', lines=True)
# 指定 orient 参数处理不同结构的 JSON
# orient='records':列表嵌套字典
# orient='index':字典嵌套字典(键为索引)
# orient='columns':字典嵌套字典(键为列名)
df_json3 = pd.read_json('data/kpi_data_index.json', orient='index')
实战技巧: 在读取大文件时,可以使用
chunksize 参数分块读取,避免内存溢出。例如:for chunk in pd.read_csv('large_file.csv', chunksize=10000): process(chunk)
3.4 实战案例:读取 KPI 指标数据并查看基本信息
以下是一个完整的实战案例,演示如何读取 KPI 指标数据并进行初步探索:
import pandas as pd
# 1. 读取 CSV 格式的 KPI 数据
df_kpi = pd.read_csv('kpi_dashboard_data.csv', encoding='utf-8')
# 2. 查看数据基本信息
print("数据形状:", df_kpi.shape)
print("列名:", df_kpi.columns.tolist())
print("数据类型:\n", df_kpi.dtypes)
# 3. 查看前几行数据
print("前5行数据:\n", df_kpi.head())
# 4. 查看统计摘要
print("统计摘要:\n", df_kpi.describe())
# 5. 检查缺失值
print("缺失值统计:\n", df_kpi.isnull().sum())
# 6. 按条件筛选数据
high_cpu = df_kpi[df_kpi['CPU使用率'] > 90]
print("CPU使用率超过90%的记录:\n", high_cpu)
扩展阅读: Pandas 还支持读取 HTML、SQL、Parquet、Feather 等多种格式。在实时监控大屏项目中,CSV 和 JSON 是最常用的数据交换格式。
3.5 本章小结
本章学习了 Pandas 的两大核心数据结构——Series 和 DataFrame 的创建、索引与切片操作,以及从 CSV、Excel、JSON 文件中读取数据的方法。这些基础操作是后续进行数据清洗、转换、分析和可视化的前提。在下一阶段,我们将基于这些技能,进一步学习数据清洗与预处理技术。