Pandas 核心数据结构详解:Series 和 DataFrame 完全指南

1. 前言:为什么需要 Pandas 数据结构?

在数据处理和分析中,我们需要高效的方式来存储和操作结构化数据。Python 原生的列表(List)和字典(Dict)虽然灵活,但缺乏针对数据分析的优化。Pandas 提供了两种核心数据结构:

  • Series:一维带标签数组(类似增强版列表)

  • DataFrame:二维表格型数据结构(类似 Excel 表格)

它们支持快速查询、自动对齐、缺失值处理、高效计算等特性,是数据分析的基础。

2. Series:一维带标签数组

2.1 创建 Series

Series 由**数据(值) + 索引(标签)**组成,可以通过列表、字典或 NumPy 数组创建:

python 复制代码
import pandas as pd
import numpy as np

# 从列表创建(默认索引为 0, 1, 2...)
s1 = pd.Series([10, 20, 30, 40])
print(s1)
"""
0    10
1    20
2    30
3    40
dtype: int64
"""

# 从字典创建(键自动变为索引)
s2 = pd.Series({'A': 90, 'B': 80, 'C': 70})
print(s2)
"""
A    90
B    80
C    70
dtype: int64
"""

# 自定义索引
s3 = pd.Series([1.1, 2.2, 3.3], index=['X', 'Y', 'Z'])
print(s3)
"""
X    1.1
Y    2.2
Z    3.3
dtype: float64
"""

2.2 Series 的属性和方法

属性/方法 说明 示例
s.values 获取值数组 s1.values[10, 20, 30, 40]
s.index 获取索引 s3.indexIndex(['X', 'Y', 'Z'])
s.dtype 数据类型 s2.dtypeint64
s.shape 形状 s1.shape(4,)
s.head(n) 前 n 行 s1.head(2) → 显示前 2 个值
s.isna() 检查缺失值 pd.Series([1, None]).isna()[False, True]

2.3 Series 的操作

python 复制代码
# 向量化运算(自动对齐索引)
s4 = pd.Series([1, 2, 3], index=['A', 'B', 'C'])
s5 = pd.Series([10, 20, 30], index=['B', 'C', 'D'])
print(s4 + s5)
"""
A     NaN  # A 只在 s4 中存在
B    12.0  # B 在两者中都存在
C    23.0
D     NaN  # D 只在 s5 中存在
dtype: float64
"""

# 条件筛选
print(s2[s2 > 80])  # 输出大于 80 的值
"""
A    90
dtype: int64
"""

3. DataFrame:二维表格型数据结构

3.1 创建 DataFrame

DataFrame 可以看作多个 Series 的集合,类似于 Excel 表格或 SQL 表:

python 复制代码
# 从字典创建(键是列名,值是数据)
data = {
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Age': [25, 30, 35],
    'Score': [88.5, 92.0, 78.5]
}
df = pd.DataFrame(data)
print(df)
"""
      Name  Age  Score
0    Alice   25   88.5
1      Bob   30   92.0
2  Charlie   35   78.5
"""

# 从列表创建(需指定列名)
data = [['Apple', 5], ['Banana', 3], ['Orange', 8]]
df2 = pd.DataFrame(data, columns=['Fruit', 'Count'])
print(df2)
"""
    Fruit  Count
0   Apple      5
1  Banana      3
2  Orange      8
"""

3.2 DataFrame 的属性和方法

属性/方法 说明 示例
df.columns 列名 df.columnsIndex(['Name', 'Age', 'Score'])
df.index 行索引 df.indexRangeIndex(start=0, stop=3)
df.shape 形状 df.shape(3, 3)
df.dtypes 每列数据类型 df.dtypesName: object, Age: int64, Score: float64
df.head(n) 前 n 行 df.head(2) → 显示前 2 行
df.describe() 统计摘要 df.describe() → 计算均值、标准差等

3.3 DataFrame 的操作

(1)选择数据
python 复制代码
# 选择列(返回 Series)
print(df['Name'])  # 或 df.Name
"""
0      Alice
1        Bob
2    Charlie
Name: Name, dtype: object
"""

# 选择多列(返回 DataFrame)
print(df[['Name', 'Score']])

# 选择行(使用 loc/iloc)
print(df.loc[1])     # 按标签选择(第 2 行)
print(df.iloc[0:2])  # 按位置选择(前 2 行)

(2)条件筛选

python 复制代码
# 筛选 Age > 25 的行
print(df[df['Age'] > 25])
"""
      Name  Age  Score
1      Bob   30   92.0
2  Charlie   35   78.5
"""

# 多条件筛选(使用 & 或 |)
print(df[(df['Age'] > 25) & (df['Score'] > 80)])

(3)增删改列

python 复制代码
# 新增列
df['Pass'] = df['Score'] >= 80
print(df)
"""
      Name  Age  Score   Pass
0    Alice   25   88.5   True
1      Bob   30   92.0   True
2  Charlie   35   78.5  False
"""

# 为每个学生添加性别信息
df['Gender'] = ['Female', 'Male', 'Male']  # 顺序对应原数据的行
print(df)
"""
      Name  Age  Score  Gender
0    Alice   25   88.5  Female
1      Bob   30   92.0    Male
2  Charlie   35   78.5    Male
"""

# 删除列
df.drop('Pass', axis=1, inplace=True)  # axis=1 表示列

4. Series vs DataFrame 对比

特性 Series DataFrame
维度 一维 二维
索引 单索引(行) 行索引 + 列索引
数据形式 单列数据 多列数据(多个 Series 的集合)
适用场景 单一变量分析(如温度序列) 多变量分析(如学生成绩表)

5. 总结

  • Series:一维数据,适合存储单列数据(如时间序列、传感器数据)。

  • DataFrame:二维表格,适合处理多列结构化数据(如 CSV、Excel 数据)。

  • 两者均支持自动对齐、向量化运算、缺失值处理,是数据分析的核心工具。

练习建议

  1. 创建一个包含学生信息的 DataFrame,并练习增删改查操作。

  2. 尝试用 Series 存储某城市一周的温度数据,并计算平均温度。

相关推荐
曾几何时`1 小时前
C++——位图、布隆过滤器
数据结构·算法
尤物程序猿2 小时前
深入理解ArrayList:从Java原生实现到手写一个ArrayList
java·数据结构·python
Frank_zhou3 小时前
算法-数组实战【设计链表】中等
数据结构·算法
夏至5604 小时前
数据结构——选择题—查漏补缺
数据结构
m0_6407435610 小时前
华为OD-2024年E卷-字符串分割[100分] -- python
数据结构·算法·华为od
code喵喵15 小时前
八种数据结构简介
数据结构·算法·推荐算法
wen__xvn15 小时前
九日集训第三天
数据结构·算法·leetcode
蒙奇D索大17 小时前
【数据结构】图论实战:DAG空间压缩术——42%存储优化实战解析
数据结构·笔记·学习·考研·图论·改行学it