001-Pandas的数据结构

发布于:2025-09-10 ⋅ 阅读:(17) ⋅ 点赞:(0)

Pandas的数据结构

Pandas(Python Data Analysis Library)是基于NumPy
的一种工具,该工具是为了解决数据分析任务而创建的。Pandas
纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。Pandas提供了大量能使我们快速便捷地处理数据的函数和方法。它是使Python成为强大而高效的数据分析环境的重要因素之一。

Pandas专用于数据预处理和数据分析的Python第三方库,最适合处理大型结构化表格数据.

Pandas有三大数据结构,Series、DataFrame以及Panel。

  • Series(一维数据)
  • DataFrame(二维数据)
  • Panel(三维结构数据/面板数据)

注释:对于Panel,会很少使用,通常会使用MultiIndex这种结构解决三维数据表示问题

1、Series

Series 是 Pandas 中最基础的一维数据结构,类似于带标签的数组或字典。它是构建 DataFrame 的基础(DataFrame
可以看作是由多个 Series 组成的)。

Series 由两部分组成:

  • 索引(index):标签,用于标识数据.
  • 数据值(values):可以是任何 NumPy 支持的数据类型

Series 的基本特性:

  1. 一维数据结构:类似于 Python 列表或 NumPy 数组,但功能更强大
  2. 带索引的数组:每个元素都有对应的标签(索引)
  3. 可以存储任何数据类型:整数、字符串、浮点数、Python对象等
  4. 大小不可变:创建后不能改变大小(但可以修改内容)

1.1、Series的结构

import pandas as pd
#1.1从列表创建,仅有数据列表即可产生最简单的Series
s = pd.Series([1, 3, 5, 7, 9])   

0    1		# 仅有数据列表即可产生最简单的Series 
1    3		# 左侧为索引,右侧是数据
2    5
3    7
4    9
dtype: int64

# 获取索引
s.index
RangeIndex(start=0, stop=5, step=1)

# 获取数据
s.values
array([1, 3, 5, 7, 9])

1.2、Series的创建

仅有数据列表即可产生最简单的Series

例如上面的代码

从字典创建Series(字典的键会成为索引)
data = {'a': 1, 'b': 2, 'c': 3}
s = pd.Series(data)
s
运行结果:
a    1
b    2
c    3
dtype: int64
指定索引创建Series
s = pd.Series([1, 2, 3], index=['x', 'y', 'z'])
s
运行结果:
x    1
y    2
z    3
dtype: int64
使用标量值创建Series(所有值相同)
s = pd.Series(5, index=['a', 'b', 'c'])
s
运行结果:
a    5
b    5
c    5
dtype: int64

1.3、根据标签索引查询数据

# 1.创建一个带有自定义索引的pandas Series
	# 数据包含混合类型:[整数1, 字符串'a', 浮点数5.2, 整数7]
	# 索引为:['d', 'b', 'c', 'a']
s2 = pd.Series([1,'a',5.2,7],index=['d','b','c','a'])

# 输出:
d      1    → 索引'd'对应值1
b      a    → 索引'b'对应字符串'a'
c    5.2    → 索引'c'对应浮点数5.2
a      7    → 索引'a'对应值7
dtype: object → 由于包含混合类型,整体类型为object


# 2.通过索引标签'a'访问Series中的单个元素
s2['a']  # 返回索引'a'对应的值: #7

# 3.查看单个元素的数据类型
type(s2['a'])   ## int → 因为值7是整数类型


# 4.通过索引标签列表访问多个元素
s2[['b','a']]
# 输出:
b    a    → 索引'b'对应字符串'a'   #返回一个新的Series,包含索引'b'和'a'对应的值
a    7    → 索引'a'对应值7
dtype: object 	#新Series的类型仍然是object

# 5.查看多元素访问结果的数据类型
type(s2[['b','a']])
输出:
pandas.core.series.Series  # 返回的是一个Series对象,而不是单个值

2、DataFrame

DataFrame是pandas库中最重要、最常用的数据结构,它是一个二维的、大小可变的、可以包含异构类型数据的表格型数据结构,类似于Excel表格或SQL数据库中的表。

DataFrame的基本特性:

  • 二维表格结构:由行和列组成,既有行索引也有列索引
  • 列可以包含不同类型的数据:数值、字符串、布尔值等
  • 大小可变:可以动态添加/删除行或列
  • 强大的数据操作功能:排序、筛选、分组、聚合等
# 创建一个字典数据,每个键对应一个列名,值是该列的数据列表。即:使用字典数据创建DataFrame
data = {
    '名称': ['张三', '李四', '王麻子', '刘二'],  # 姓名列,包含4个字符串
    '年龄': [25, 32, 18, 47],                 # 年龄列,包含4个整数
    '城市': ['苏州', '杭州', '深圳', '重庆'],    # 城市列,包含4个字符串
    '分数': [85, 90, 78, 92]                  # 分数列,包含4个整数
}

df = pd.DataFrame(data)
df
# 显示DataFrame的内容输出,自动生成默认的行索引:0, 1, 2, 3
    名称  年龄  城市  分数
0   张三  25  苏州  85
1   李四  32  杭州  90
2   王麻  18  深圳  78  
3   刘二  47  重庆  92


# 查看DataFrame中各列的数据类型
df.dtypes

名称    object  → 字符串类型
年龄     int64  → 64位整数类型
城市    object  → 字符串类型
分数     int64  → 64位整数类型
dtype: object


# 查看DataFrame的列名(列索引)
df.columns
Index(['名称', '年龄', '城市', '分数'], dtype='object')  #返回一个Index对象,包含所有列名

# 查看DataFrame的行索引 
df.index
RangeIndex(start=0, stop=4, step=1)   #表示行索引从0开始,到4结束(不包括4),步长为1,即索引为[0, 1, 2, 3]

DataFrame中查询出Series

  • 如果只查询一行、一列,返回的是pd.Series
  • 如果查询多行、多列,返回的是pd.DataFrame
# 创建一个字典数据,包含4个键值对,每个键对应一个列名,值是该列的数据列表
data = {
    '名称': ['张三', '李四', '王麻', '刘二'],  # 姓名列
    '年龄': [25, 32, 18, 47],                 # 年龄列  
    '城市': ['苏州', '杭州', '深圳', '重庆'],    # 城市列
    '分数': [85, 90, 78, 92]                  # 分数列
}

# 使用字典数据创建pandas DataFrame
df = pd.DataFrame(data)


# 1. 查询列

# 1.1 查询单列 - 使用方括号和列名字符串
# 返回一个pd.Series对象,包含该列的所有数据
df["名称"]

0     张三
1     李四  
2     王麻
3     刘二
Name: 名称, dtype: object  # Name显示列名,dtype显示数据类型

# 查看单列查询结果的类型

type(df['名称'])
pandas.core.series.Series  # 单列查询返回Series对象

# 1.2 查询多列 - 使用方括号和列名列表
df[["名称","年龄"]]

    名称  年龄
0   张三  25      # 返回一个DataFrame对象,包含指定的多列数据
1   李四  32  
2   王麻  18
3   刘二  47

# 查看多列查询结果的类型
# 返回:pandas.core.frame.DataFrame → 多列查询返回DataFrame对象
type(df[["名称","年龄"]])
pandas.core.frame.DataFrame

# 2. 查询行

# 2.1 查询单行 - 使用loc和行索引
# 返回一个pd.Series对象,包含该行的所有数据
df.loc[1]
# 输出:
# 名称    李四
# 年龄    32
# 城市    杭州
# 分数    90
# Name: 1, dtype: object  # Name显示行索引,dtype显示数据类型

# 查看单行查询结果的类型
# 返回:pandas.core.series.Series → 单行查询返回Series对象
type(df.loc[1])

# 2.2 查询多行 - 使用loc和切片操作
# 返回一个DataFrame对象,包含指定的多行数据
# 注意:loc切片是包含结束位置的,即包含索引1到3的所有行
df.loc[1:3]
    名称  年龄  城市  分数
1   李四  32  杭州  90
2   王麻  18  深圳  78
3   刘二  47  重庆  92

# 查看多行查询结果的类型
# 返回:pandas.core.frame.DataFrame → 多行查询返回DataFrame对象
type(df.loc[1:3])

关键区别总结

特性 选择单列 df['姓名'] 选择多列 df[['姓名', '年龄']]
语法 单中括号 + 字符串 双中括号 + 列表
返回值 Series (一维) DataFrame (二维)
用途 获取单独一列的数据 获取一个由多列组成的子集表格
类比 从Excel中复制一列 从Excel中复制几列到一个新工作表

为什么这个区别很重要?

因为Series和DataFrame有不同的方法和属性。例如,你可以对Series计算平均值(如果它是数字类型),但对DataFrame你可以进行更复杂的操作,比如同时处理多个列的关系。


网站公告

今日签到

点亮在社区的每一天
去签到