1、Pandas 数据结构:从 Series 到 DataFrame

目录

Series

[创建 Series](#创建 Series)

[Series 索引和选择](#Series 索引和选择)

DataFrame

[创建 DataFrame](#创建 DataFrame)

[DataFrame 索引和选择](#DataFrame 索引和选择)

[DataFrame 操作和转换](#DataFrame 操作和转换)

数据结构转换


Series

Series 是 Pandas 中的一维数组形式的数据结构,它可以包含任何数据类型(整数、字符串、浮点数、Python对象等)。Series 基本上可以被视作一个定长的有序字典,因为它是索引值到数据值的一个映射。

创建 Series

可以使用 pd.Series(data, index=index) 来创建 Series,其中 data 可以是列表、字典、ndarray 等,index 是数据索引标签。

复制代码
import pandas as pd

# 从列表创建 Series
s1 = pd.Series([1, 3, 5, 7, 9])
print(s1)
print("=="*10)

# 从字典创建 Series
s2 = pd.Series({'a': 100, 'b': 200, 'c': 300})
print(s2)
print("=="*10)

# 从 ndarray 创建 Series
s3 = pd.Series(pd.date_range('20230101', periods=6))
print(s3)

结果:

复制代码
0    1
1    3
2    5
3    7
4    9
dtype: int64
====================
a    100
b    200
c    300
dtype: int64
====================
0   2023-01-01
1   2023-01-02
2   2023-01-03
3   2023-01-04
4   2023-01-05
5   2023-01-06
dtype: datetime64[ns]

Series 索引和选择

Series 支持基于位置和基于标签的索引。

复制代码
# 选择第四个元素
print(s1[3])

# 选择索引标签为 'b' 的元素
print(s2['b'])

# 选择前三个元素
print(s1[:3])

结果:

复制代码
7
200
0    1
1    3
2    5

DataFrame

DataFrame 是 Pandas 中的二维表格型数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔值等)。DataFrame 既有行索引也有列索引,它可以被看作是由 Series 组成的字典。

创建 DataFrame

可以使用 pd.DataFrame(data, index=index, columns=columns) 来创建 DataFrame,其中 data 可以是字典、ndarray、Series 或另一个 DataFrame。

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

# 从字典创建 DataFrame
df1 = pd.DataFrame({
    'A': 1.,
    'B': pd.Timestamp('20230102'),
    'C': pd.Series(1, index=list(range(4)), dtype='float32'),
    'D': np.array([3] * 4, dtype='int32'),
    'E': pd.Categorical(["test", "train", "test", "train"]),
    'F': 'foo'
})
print(df1)

# 从二维ndarray创建 DataFrame
df2 = pd.DataFrame(np.random.randn(6, 4), columns=['A', 'B', 'C', 'D'])
print(df2)

结果:

复制代码
     A          B    C  D      E    F
0  1.0 2023-01-02  1.0  3   test  foo
1  1.0 2023-01-02  1.0  3  train  foo
2  1.0 2023-01-02  1.0  3   test  foo
3  1.0 2023-01-02  1.0  3  train  foo
          A         B         C         D
0 -0.434026  0.948463  0.386731  0.814795
1 -0.317982 -2.987843  0.519228 -1.365834
2 -2.120951  0.385530 -0.066971  0.089497
3 -1.299795  0.648691 -1.954919 -0.441423
4  0.789665  0.819811 -0.519527 -0.157360
5  0.701758  0.455677 -0.418348  0.518226

DataFrame 索引和选择

DataFrame 提供了多种方法来选择和索引:

复制代码
# 选择单独的一列,返回一个 Series
print(df1['A'])

# 利用 loc 选择行
print(df2.loc[0])

# 通过位置选择
print(df2.iloc[3])

# 切片选择行
print(df2[2:5])

# 布尔索引
print(df1[df1['A'] > 0])

结果:

复制代码
0    1.0
1    1.0
2    1.0
3    1.0
Name: A, dtype: float64
A    0.463703
B   -0.132394
C   -1.097140
D    0.617243
Name: 0, dtype: float64
A    1.522528
B    1.262699
C    1.334090
D   -1.488483
Name: 3, dtype: float64
          A         B         C         D
2 -0.382140  2.616053  1.539264  0.486279
3  1.522528  1.262699  1.334090 -1.488483
4 -0.272724  4.060280  1.894378  0.794090
     A          B    C  D      E    F
0  1.0 2023-01-02  1.0  3   test  foo
1  1.0 2023-01-02  1.0  3  train  foo
2  1.0 2023-01-02  1.0  3   test  foo
3  1.0 2023-01-02  1.0  3  train  foo

DataFrame 操作和转换

DataFrame 支持各种操作,包括数据清洗、转换、聚合等。

复制代码
# 设置新的一列
df1['G'] = df1['A'] * 2
print(df1)

# 删除一列
df1.drop(columns='G', inplace=True)

# 聚合操作
print(df1.mean())

数据结构转换

Series 与 DataFrame 之间可以相互转换:

复制代码
# Series 转 DataFrame
s_to_df = s1.to_frame()

# DataFrame 转 Series
df_to_s = df1['A']
相关推荐
程序员杰哥1 天前
2026软件测试面试宝典(含答案+文档)
自动化测试·软件测试·python·测试工具·面试·职场和发展·测试用例
寻星探路1 天前
【算法进阶】滑动窗口与前缀和:从“和为 K”到“最小覆盖子串”的极限挑战
java·开发语言·c++·人工智能·python·算法·ai
木木木一1 天前
Rust学习记录--C10 泛型,Trait,生命周期
python·学习·rust
WangYaolove13141 天前
基于深度学习的身份证识别考勤系统(源码+文档)
python·mysql·django·毕业设计·源码
weixin_445054721 天前
力扣热题53
开发语言·python
数据大魔方1 天前
【期货量化实战】豆粕期货量化交易策略(Python完整代码)
开发语言·数据库·python·算法·github·程序员创富
@汤圆酱1 天前
【无标题】
python·jmeter
内存不泄露1 天前
基于 Spring Boot 的医院预约挂号系统(全端协同)设计与实现
java·vue.js·spring boot·python·flask
码农幻想梦1 天前
实验7 知识表示与推理
开发语言·人工智能·python
写代码的【黑咖啡】1 天前
深入理解 Python 中的 SQLAlchemy
开发语言·python·oracle