Series与DataFrame的区别有什么?
Pandas Series 与 DataFrame:核心定义、区别与使用场景
Pandas 是基于 NumPy 构建的数据分析库,核心数据结构是 Series(一维标签数组) 和 DataFrame(二维表格数据),二者均支持标签索引、缺失值处理和高效数据操作,是数据分析的基石。
一、Series:一维“带标签的数组”
核心定义
Series 是 一维、同构 的数据容器,可理解为“Python 列表 + 标签索引”或“NumPy 一维 ndarray + 自定义索引”,每个元素对应唯一标签(索引)。
关键特性
- 结构组成:由
values(数据区,本质是 ndarray)和index(标签索引,默认是 0 开始的整数索引,可自定义)两部分组成。 - 数据类型:列内数据必须同构(如全 int、全 str、全 float),支持
int32/64、float32/64、object(字符串/混合)、category(分类)等 dtype。 - 核心优势:支持标签索引(如按名称取值)、缺失值(
NaN)自动识别、向量化运算(同 NumPy)。
简单示例
import pandas as pd
import numpy as np
# 1. 基础创建(默认整数索引)
s1 = pd.Series([10, 20, 30, 40])
# 输出:
# 0 10
# 1 20
# 2 30
# 3 40
# dtype: int64
# 2. 自定义索引(标签可重复,非唯一)
s2 = pd.Series([10, 20, 30], index=["a", "b", "c"])
s2["b"] # 按标签取值,输出 20
# 3. 从字典创建(键为索引,值为数据)
s3 = pd.Series({"北京": 20, "上海": 25, "广州": 28})
二、DataFrame:二维“带标签的表格”
核心定义
DataFrame 是 二维、异构 的表格数据结构,可理解为“多个 Series 按列拼接而成”,既有行索引(index)也有列索引(columns),对应 Excel 表格、SQL 表或数据库中的一张表。
关键特性
- 结构组成:由多个列(每列是一个 Series,同构)、行索引(index)、列索引(columns)组成,数据存储为列级 ndarray 集合(列内连续,列间独立)。
- 数据类型:列间可异构(如一列 int、一列 str、一列 float),列内必须同构,支持 dtype 单独优化(如某列字符串用
category类型)。 - 核心优势:支持表格级操作(筛选、分组、合并、透视)、缺失值灵活处理、与 NumPy/列表/字典无缝转换,是数据分析的核心载体。
简单示例
# 1. 从字典创建(键为列名,值为 Series/列表)
data = {
"姓名": ["张三", "李四", "王五"],
"年龄": [25, 30, 35],
"城市": ["北京", "上海", "广州"]
}
df = pd.DataFrame(data, index=["a", "b", "c"]) # 自定义行索引
# 2. 核心操作(示例)
df["年龄"] # 取一列(返回 Series)
df.loc["b"] # 按行标签取一行
df[df["年龄"] > 28] # 按条件筛选行
df["年龄"] = df["年龄"] + 1 # 列级向量化运算
三、Series 与 DataFrame 的核心区别
| 特性 | Series | DataFrame |
|---|---|---|
| 维度 | 一维(1D) | 二维(2D) |
| 索引 | 仅行索引(index) | 行索引(index)+ 列索引(columns) |
| 数据同构性 | 列内(唯一列)必须同构 | 列内同构,列间可异构 |
| 核心定位 | 单一变量数据(如“某城市温度序列”) | 多变量表格数据(如“用户信息表”) |
| 操作重点 | 一维数组运算(排序、统计) | 表格级操作(筛选、分组、合并) |
| 转换关系 | 可作为 DataFrame 的一列/一行 | 可通过 df["列名"] 提取 Series |
四、核心使用场景
- Series:存储单一维度的序列数据(如时间序列、某指标的数值序列),适合一维数据的统计分析(均值、标准差、排序)。
- DataFrame:存储多维度关联数据(如用户信息、销售数据、实验数据),适合复杂数据分析流程(数据清洗→探索性分析→建模准备)。
需要我补充 Series/DataFrame 的核心操作对比(如筛选、缺失值处理),或结合之前的内存模型讲解如何优化 DataFrame 的内存占用吗?

浙公网安备 33010602011771号