深入解析 Pandas 核心数据结构:Series 与 DataFrame
在数据分析和科学计算领域,Pandas 是 Python 生态中最受欢迎的库之一。它提供了高效、灵活且易于使用的数据结构,使得数据清洗、转换和分析变得更加便捷。Pandas 的核心数据结构包括 Series 和 DataFrame,它们为处理结构化数据提供了强大的支持。本文将深入探讨这些数据结构的特点、创建方式、常用操作以及实际应用场景,帮助读者全面掌握 Pandas 的核心功能。
1. Pandas 简介
Pandas 是由 Wes McKinney 于 2008 年开发的 Python 库,旨在提供高性能、易用的数据结构和数据分析工具。它的名字来源于“Panel Data”(面板数据),强调了其在多维数据操作方面的能力。Pandas 构建于 NumPy 之上,因此能够高效地处理数值计算任务,同时增加了数据标签、缺失值处理等高级功能。
Pandas 的主要优势包括:
-
灵活的数据结构(Series 和 DataFrame)。
-
强大的数据清洗能力(处理缺失值、去重、数据转换等)。
-
高效的数据分析工具(分组、聚合、时间序列分析等)。
-
与其他库的无缝集成(NumPy、Matplotlib、Scikit-learn 等)。
接下来,我们将重点介绍 Pandas 的两种核心数据结构:Series 和 DataFrame。
2. Series:一维带标签数组
2.1 什么是 Series?
Series 是 Pandas 中最基本的数据结构,类似于 Python 的列表或 NumPy 的数组,但具有额外的索引功能。它由两部分组成:
-
数据值(Values):可以是整数、浮点数、字符串、布尔值等。
-
索引(Index):用于标识数据的标签,类似于字典的键。
Series 可以看作是一个带标签的一维数组,这使得它比普通数组更加强大,因为我们可以通过索引快速访问数据。
2.2 创建 Series
Series 可以通过多种方式创建:
(1)从列表创建
import pandas as pddata = [10, 20, 30, 40]
s = pd.Series(data)
print(s)
输出:
0 10
1 20
2 30
3 40
dtype: int64
默认情况下,索引是 0 开始的整数,但我们可以自定义索引:
s = pd.Series(data, index=['a', 'b', 'c', 'd'])
print(s)
输出:
a 10
b 20
c 30
d 40
dtype: int64
(2)从字典创建
字典的键会自动成为 Series 的索引:
data = {'a': 10, 'b': 20, 'c': 30}
s = pd.Series(data)
print(s)
输出:
a 10
b 20
c 30
dtype: int64
(3)从 NumPy 数组创建
import numpy as nparr = np.array([1, 2, 3])
s = pd.Series(arr, index=['x', 'y', 'z'])
print(s)
输出:
x 1
y 2
z 3
dtype: int64
2.3 Series 的常用操作
(1)访问数据
s = pd.Series([10, 20, 30], index=['a', 'b', 'c'])
print(s['a']) # 输出 10
print(s[0]) # 输出 10(默认位置索引仍然可用)
(2)切片操作
print(s['a':'c']) # 输出 a:10, b:20, c:30
(3)数学运算
Series 支持向量化运算:
s1 = pd.Series([1, 2, 3])
s2 = pd.Series([4, 5, 6])
print(s1 + s2) # 输出 5, 7, 9
(4)缺失值处理
Pandas 使用 NaN
(Not a Number)表示缺失值:
s = pd.Series([1, 2, None, 4])
print(s.isna()) # 检查缺失值
s.fillna(0, inplace=True) # 填充缺失值
2.4 Series 的应用场景
-
单变量数据分析(如股票价格、温度变化)。
-
作为 DataFrame 的列(DataFrame 的每一列都是一个 Series)。
-
快速数据计算(如统计、聚合)。
3. DataFrame:二维表格型数据结构
3.1 什么是 DataFrame?
DataFrame 是 Pandas 中最常用的数据结构,类似于 Excel 表格或 SQL 数据库中的表。它由多个 Series 组成,每一列可以有不同的数据类型(整数、字符串、浮点数等),并且具有行和列的标签。
DataFrame 的核心特点:
-
二维结构(行和列)。
-
列可以有不同的数据类型。
-
支持索引和切片。
-
提供丰富的数据操作方法(如合并、分组、透视表等)。
3.2 创建 DataFrame
(1)从字典创建
字典的键会成为列名:
data = {'Name': ['Alice', 'Bob', 'Charlie'],'Age': [25, 30, 35],'City': ['New York', 'London', 'Tokyo']
}
df = pd.DataFrame(data)
print(df)
输出:
Name Age City
0 Alice 25 New York
1 Bob 30 London
2 Charlie 35 Tokyo
(2)从列表创建
data = [['Alice', 25, 'New York'],['Bob', 30, 'London'],['Charlie', 35, 'Tokyo']
]
df = pd.DataFrame(data, columns=['Name', 'Age', 'City'])
print(df)
(3)从 CSV 文件读取
df = pd.read_csv('data.csv')
3.3 DataFrame 的常用操作
(1)查看数据
df.head() # 查看前 5 行
df.tail() # 查看后 5 行
df.info() # 查看数据结构
df.describe() # 统计摘要
(2)选择数据
# 选择列
df['Name'] # 返回 Series
df[['Name', 'Age']] # 返回 DataFrame# 选择行
df.loc[0] # 按标签选择
df.iloc[0] # 按位置选择# 条件筛选
df[df['Age'] > 30]
(3)修改数据
# 新增列
df['Salary'] = [50000, 60000, 70000]# 修改值
df.loc[0, 'Age'] = 26# 删除列
df.drop('City', axis=1, inplace=True)
(4)数据聚合
df.groupby('City')['Age'].mean() # 按城市分组计算平均年龄
3.4 DataFrame 的应用场景
-
数据清洗与预处理(处理缺失值、去重、数据转换)。
-
数据分析与统计(聚合、分组、透视表)。
-
机器学习数据准备(特征工程、数据标准化)。
4. Index 与 MultiIndex(分层索引)
4.1 Index 对象
DataFrame 和 Series 的索引是不可变的,支持高效查找:
df.index # 查看行索引
df.columns # 查看列索引
4.2 MultiIndex(分层索引)
适用于多维数据分析:
index = pd.MultiIndex.from_tuples([('A', 1), ('A', 2), ('B', 1)],names=['Group', 'ID']
)
df = pd.DataFrame({'Value': [10, 20, 30]}, index=index)
print(df)
输出:
Value
Group ID
A 1 102 20
B 1 30
5. 总结
Pandas 的 Series 和 DataFrame 是数据分析的核心工具:
-
Series:一维带标签数组,适合单变量分析。
-
DataFrame:二维表格,适合结构化数据处理。
-
Index/MultiIndex:提供灵活的数据访问方式。
掌握这些数据结构后,可以高效地进行数据清洗、分析和可视化,为更复杂的数据科学任务打下坚实基础。