Python之三大基本库——Pandas(1)

Python之三大基本库——Pandas(1)

大家好,继之前我们总结了Numpy和Matplotlib两大基本库之后,今天来总结一下最后一个Python的基本库Pandas,关于Pandas的内容会讲解的更细一些,可能分为多篇内容,希望大家多支持。

目录

一、什么是Pandas

核心功能

应用场景

二、安装Pandas

三、使用Pandas

1、Pandas的两大核心:Series和DataFrame

1.1、Series-带标签的一维数组

a.什么是Series?

b.创建Series的多种方式

c.Series的核心属性

d.Series的索引和切片

e.Series的基本操作

1.2、DataFrame-二维表格数据结构

a.什么是DataFrame?

b.创建DataFrame的多种方式

c.DataFrame的核心属性

d.访问获取DataFrame中的数据

e.根据条件筛选数据

f.修改DataFrame

1.3、Series VS DataFrame 对比总结

1.4、实际应用示例

总结:


一、什么是Pandas

Pandas是Python中用于数据分析和处理的开源库,基于NumPy构建,专注于结构化数据(如表格、时间序列)的快速处理。

简单来说,pandas是一个开源的Python库,它为Python提供了快速、灵活、易于使用的数据结构和数据分析工具。它的名字来源于“Panel Data”(面板数据),但我们可以亲切地把它想象成一个超级智能的电子表格

官方文档:https://pandas.pydata.org/docs/

中文官方文档:pandas 文档 — pandas 2.3.0 文档 - pandas 数据分析库

核心功能

提供DataFrame和Series两种核心数据结构,支持数据清洗、缺失值处理、数据转换及统计分析,可高效处理CSV、Excel、SQL等多种格式数据。 ‌

应用场景

适用于金融数据分析、机器学习数据预处理等场景,尤其适合处理中小型数据集(如单机数据处理)。

二、安装Pandas

想要安装Pandas首先需要确认已经安装了Python,外网安装较慢也可以通过国内镜像安装,在之前的文章中我们讲解过,大家参考一下https://blog.ZEEKLOG.net/m0_61746796/article/details/128575340

有需要的也可以在本地安装虚拟环境,可以参考下面文章

https://blog.ZEEKLOG.net/m0_61746796/article/details/132691221?spm=1001.2014.3001.5502

然后在终端或者虚拟环境中执行,因为pandas的底层依赖于numpy所以最好一起安装

pip install pandas numpy -i https://pypi.tuna.tsinghua.edu.cn/simple

安装好之后我们在应用中使用的时候需要进行引用,通常会起一个别名,例如:

import pandas as pd

三、使用Pandas

1、Pandas的两大核心:Series和DataFrame

想要熟练使用pandas,就必须要了解它的核心概念组成,其中Series和DataFrame就是最根本的数据结构核心

1.1、Series-带标签的一维数组

a.什么是Series?
Series是Pandas中最基本的数据结构,你可以把它理解为:一个带标签的数组像Python中的列表,但更强大像Excel中的一列数据像字典和numpy数组的结合体
b.创建Series的多种方式

创建series大致总结了三种方式:从列表中创建/(指定索引)、从字典创建、从numpy数组创建

import pandas as pd import numpy as np # 方式1:从列表创建(最常用) data_list = [90, 85, 92, 88] scores = pd.Series(data_list) print("从列表创建:") print(scores) print() # 方式2:从列表创建并指定索引 scores_named = pd.Series([90, 85, 92, 88], index=['张三', '李四', '王五', '赵六']) print("带自定义索引的Series:") print(scores_named) print() # 方式3:从字典创建(键自动成为索引) data_dict = {'张三': 90, '李四': 85, '王五': 92, '赵六': 88} scores_dict = pd.Series(data_dict) print("从字典创建:") print(scores_dict) print() # 方式4:从numpy数组创建 arr = np.array([90, 85, 92, 88]) scores_np = pd.Series(arr, index=['A', 'B', 'C', 'D']) print("从numpy数组创建:") print(scores_np)
c.Series的核心属性
# 创建一个示例Series students = pd.Series([90, 85, 92, 88, 95], index=['Alice', 'Bob', 'Charlie', 'David', 'Eve']) print("Series数据:") print(students) print("\n核心属性:") print(f"索引:{students.index}") # 获取索引 print(f"值:{students.values}") # 获取值数组 print(f"形状:{students.shape}") # 获取形状 print(f"数据类型:{students.dtype}") # 数据类型 print(f"大小:{students.size}") # 元素个数

运行结果如下:

d.Series的索引和切片
print("原始Series:") print(students) print() # 按标签索引 print("Bob的成绩:", students['Bob']) print("Charlie的成绩:", students.loc['Charlie']) # 按位置索引 print("第一个元素:", students[0]) print("前三个元素:", students.iloc[:3]) # 布尔索引 print("90分以上的学生:") print(students[students > 90]) # 多标签索引 print("多个学生成绩:") print(students[['Alice', 'David', 'Eve']])

运行结果如下:

e.Series的基本操作
# 数学运算 print("所有成绩加5分:") print(students + 5) print("\n成绩乘以1.1:") print(students * 1.1) # 统计操作 print(f"\n平均分:{students.mean()}") print(f"最高分:{students.max()}") print(f"最低分:{students.min()}") print(f"标准差:{students.std()}") # 向量化操作 bonus = pd.Series([5, 3, 2, 4, 1], index=students.index) print("\n加上额外加分:") print(students + bonus)

运行结果如下:

1.2、DataFrame-二维表格数据结构

a.什么是DataFrame?
DataFrame是Pandas中最重要的数据结构,你可以把它理解为:一个二维的、大小可变的、可以包含异构数据类型的表格像Excel中的一个工作表像SQL数据库中的一张表由多个Series组成(每个列都是一个Series)
b.创建DataFrame的多种方式

创建series大致总结了三种方式:从字典创建(常用)、从列表中创建、从Series创建

# 方式1:从字典创建(最常用) data = { '姓名': ['张三', '李四', '王五', '赵六'], '年龄': [20, 21, 19, 22], '成绩': [90, 85, 92, 88], '城市': ['北京', '上海', '广州', '深圳'] } df = pd.DataFrame(data) print("从字典创建的DataFrame:") print(df) print() # 方式2:从列表的列表创建 data_list = [ ['张三', 20, 90, '北京'], ['李四', 21, 85, '上海'], ['王五', 19, 92, '广州'], ['赵六', 22, 88, '深圳'] ] df_list = pd.DataFrame(data_list, columns=['姓名', '年龄', '成绩', '城市']) print("从列表创建的DataFrame:") print(df_list) print() # 方式3:从Series创建 name_series = pd.Series(['张三', '李四', '王五', '赵六']) age_series = pd.Series([20, 21, 19, 22]) score_series = pd.Series([90, 85, 92, 88]) df_series = pd.DataFrame({ '姓名': name_series, '年龄': age_series, '成绩': score_series }) print("从Series创建的DataFrame:") print(df_series)
c.DataFrame的核心属性
print("DataFrame基本信息:") print(f"形状:{df.shape}") # (行数, 列数) print(f"列名:{df.columns}") # 列索引 print(f"索引:{df.index}") # 行索引 print(f"数据类型:\n{df.dtypes}") # 每列的数据类型 print(f"基本信息:") print(df.info()) print(f"统计描述:\n{df.describe()}") # 数值列的统计描述

运行结果如下:

d.访问获取DataFrame中的数据
print("原始DataFrame:") print(df) print() # 选择单列(返回Series) print("选择'姓名'列:") print(df['姓名']) print(type(df['姓名'])) # 查看数据类型 # 选择多列(返回DataFrame) print("\n选择'姓名'和'成绩'列:") print(df[['姓名', '成绩']]) # 使用loc按标签选择 print("\n选择前两行:") print(df.loc[0:1]) # 包含结束位置 print("\n选择特定行和列:") print(df.loc[1:2, ['姓名', '城市']]) # 使用iloc按位置选择 print("\n按位置选择前两行:") print(df.iloc[0:2]) # 不包含结束位置 print("\n按位置选择特定行列:") print(df.iloc[1:3, 0:2]) # 第1-2行,第0-1列
e.根据条件筛选数据
print("原始数据:") print(df) print() # 单条件筛选 print("成绩大于90的学生:") print(df[df['成绩'] > 90]) print("\n来自北京的学生:") print(df[df['城市'] == '北京']) # 多条件筛选 print("\n年龄大于20且成绩大于85的学生:") print(df[(df['年龄'] > 20) & (df['成绩'] > 85)]) print("\n来自北京或上海的学生:") print(df[(df['城市'] == '北京') | (df['城市'] == '上海')])

运行结果如下:

f.修改DataFrame

如何修改原有框架中的数据,下面分别从两个方向进行讲解,分别是从列的角度和行的角度

# 以列的角度来进行增删改 # 添加新列 df['等级'] = ['A', 'B', 'A', 'B'] print("添加'等级'列后:") print(df) # 修改列 df['成绩调整'] = df['成绩'] + 5 print("\n添加'成绩调整'列后:") print(df) # 修改特定值 df.loc[0, '成绩'] = 95 # 修改张三的成绩 print("\n修改张三成绩后:") print(df) # 删除列 df_dropped = df.drop('成绩调整', axis=1) print("\n删除'成绩调整'列后:") print(df_dropped)
# 以行的角度来进行增删改 # 1、增加新行 # 方法1:以两个dataframe的方式进行合并,使用字典创建新行 new_row = {'姓名': '王五', '年龄': 19, '成绩': 92, '城市': '广州'} new_df = pd.DataFrame([new_row]) # 注意要放在列表中 df_new = pd.concat([df, new_df], ignore_index=True) print("\n添加新行后:") print(df_new) # 添加多个新行 new_rows = pd.DataFrame([ ['孙七', 23, 95, '杭州'], ['周八', 20, 87, '南京'] ], columns=df.columns) df = pd.concat([df, new_rows], ignore_index=True) print("\n批量添加多行后:") print(df) # 方法2:使用loc在末尾添加(如果索引不存在会自动创建) df.loc[2] = ['王五', 19, 92, '广州'] # 指定索引位置 df.loc[3] = ['赵六', 22, 88, '深圳'] print("\n使用loc添加行后:") print(df) # 2、删除行 # 方法1:删除单行(按索引) df_dropped = df.drop(0) # 删除索引为0的行 print("删除第一行后:") print(df_dropped) # 方法2:删除多行 df_dropped_multi = df.drop([1, 3]) # 删除索引为1和3的行 print("\n删除第2和第4行后:") print(df_dropped_multi) # 3、修改行 print("修改前的数据:") print(df) # 方法1:修改单行 df.loc[0] = ['张三丰', 25, 98, '武当山'] # 完全替换第一行 print("\n修改第一行后:") print(df) # 方法2:只修改特定列的值 df.loc[1, ['年龄', '成绩']] = [22, 93] # 修改第二行的年龄和成绩 print("\n修改第二行部分值后:") print(df) # 方法3:修改单个值 df.loc[2, '城市'] = '成都' print("\n修改第三行城市后:") print(df) # 方法4:按位置修改(第二行,第一列:姓名) df.iloc[1, 0] = '李四四' print("\n使用iloc修改后:") print(df) # 方法5:修改整行 df.iloc[2] = ['王五五', 24, 89, '重庆'] print("\n使用iloc修改整行后:") print(df)

除了上述的例子,我们还有多种方法来操作数据,例如iloc、at、loc等等,后面有时间会简单给大家讲解一下各自的区别,更新后会来附上链接,有兴趣的小伙伴可以收藏。

1.3、Series VS DataFrame 对比总结

特性SeriesDataFrame
维度一维二维
类比Excel中的一列整个Excel表格
结构索引 + 值数组行索引 + 列索引 + 值矩阵
创建方式列表、字典、numpy数组字典、列表的列表、Series字典
选择数据s[label]s.loc[label]s.iloc[position]df[column]df.loc[row, col]df.iloc[row_pos, col_pos]
主要用途单一变量的数据多变量、表格型数据

1.4、实际应用示例

让我们用一个完整的例子来展示Series和DataFrame的配合使用:

# 创建学生数据 students_df = pd.DataFrame({ '数学': [85, 92, 78, 90], '英语': [88, 79, 95, 87], '物理': [92, 85, 88, 94] }, index=['张三', '李四', '王五', '赵六']) print("学生成绩表:") print(students_df) print() # 从DataFrame中提取Series math_scores = students_df['数学'] print("数学成绩Series:") print(math_scores) print(f"类型:{type(math_scores)}") # 对Series进行操作 print(f"\n数学平均分:{math_scores.mean()}") print(f"数学最高分:{math_scores.max()}") # 将Series操作结果添加回DataFrame students_df['总分'] = students_df['数学'] + students_df['英语'] + students_df['物理'] students_df['平均分'] = students_df['总分'] / 3 print("\n添加总分和平均分后:") print(students_df)
总结:Series 是构建块,是单一维度的数据容器DataFrame 是工作马,是实际数据分析中最常用的结构理解它们之间的关系(DataFrame由多个Series组成)是掌握Pandas的关键熟练使用索引和切片操作是进行有效数据分析的基础

建议你亲自运行这些代码,并尝试创建自己的Series和DataFrame,这样才能真正理解它们的工作原理!

今天就初步总结到这里,我会在后续更为深入的讲解分析,对比Pandas中其他的使用方法,希望大家多多支持,点赞关注收藏评论(转发请附上链接),我将更加有动力更新文章!!!

Read more

腾讯版“免部署小龙虾“WorkBuddy,平替开源OpenClaw,无需抢购Mac Mini,所有电脑均可部署安装!0元养虾!

腾讯版“免部署小龙虾“WorkBuddy,平替开源OpenClaw,无需抢购Mac Mini,所有电脑均可部署安装!0元养虾!

前言:AI Agent时代来了,你还在为"养虾"发愁? 最近,开源AI智能体OpenClaw(被网友亲切称为"小龙虾")火遍全网,GitHub星标数超过24.8万,登顶星标榜第一!它能自动盯盘、写周报、修代码,甚至操作你的电脑完成复杂任务,堪称"数字员工"。 然而,想养这只"虾"可不容易: 需要抢购Mac Mini(M1/M2芯片,内存16GB起步) 要手动配置Docker、API密钥、网络环境 命令行操作复杂,普通用户往往耗费数小时仍无法成功运行 好消息来了!腾讯云正式推出WorkBuddy—— 腾讯版"免部署小龙虾",完全兼容OpenClaw技能,但无需配置、

By Ne0inhk
Qwen3.5开源矩阵震撼发布!从0.8B到397B,不同规模模型性能、显存、速度深度对比与选型指南来了!

Qwen3.5开源矩阵震撼发布!从0.8B到397B,不同规模模型性能、显存、速度深度对比与选型指南来了!

截至今天2026年3月3日,Qwen3.5已形成从0.8B到397B的完整开源矩阵,分为轻量稠密(0.8B/2B/4B/9B/27B)、中型MoE(35B-A3B/122B-A10B)、旗舰MoE(397B-A17B)三大梯队。不同尺度在性能、显存、速度、场景上差异显著,下面是完整对比与选型指南,仅供参考。 一、Qwen3.5全尺度核心参数总览(2026.3最新) 1.轻量稠密系列(Dense,个人/边缘/轻量服务) 名称总参数激活参数架构上下文显存****FP164bit****量化显存定位Qwen3.5-0.8B0.8B0.8BDense32K1.6GB0.4GB极致轻量、端侧/实时交互Qwen3.5-2B2B2BDense32K4GB1GB移动端/IoT、低延迟对话Qwen3.5-4B4B4BDense64K8GB2GB轻量Agent、多模态基座Qwen3.

By Ne0inhk
开源实战——手把手教你搭建AI量化分析平台:从Docker部署到波浪理论实战

开源实战——手把手教你搭建AI量化分析平台:从Docker部署到波浪理论实战

目录 导语 一、 为什么我们需要自己的AI分析工具? 二、 核心部署实战:避坑指南与镜像加速 1.基础环境准备 2.配置 AI 大脑:蓝耘 API 3.进阶技巧:Dockerfile 镜像加速(关键步骤) 4.构建与启动 三、 核心功能深度评测:AI 如何解读波浪理论? 1.AI 股票对话分析:不只是聊天,是逻辑推演 2.模拟交易账户管理:实战演练场 3.历史回测:让数据说话 4.系统设置界面 四、 打造全天候监控体系:通知渠道配置 五、 总结 导语 在量化交易日益普及的今天,散户最缺的往往不是数据,而是对数据的“解读能力”。面对满屏的K线图,

By Ne0inhk

(长期有效)接入第三方 OpenAI 兼容模型到 GitHub Copilot

目前 GitHub Copilot 仅支持接入国外的几家模型提供商,无法直接调用 OpenAI 兼容的自定义 API 进行扩展。参考相关解决方案,我总结了一下Copilot中接入OpenAI 兼容 API 的方法。 实现方法主要分为两种: 方案一:修改 Copilot Chat 源代码 在模型选择器中新增自定义提供商选项。 方案二:API 兼容适配 将 OpenAI 兼容的自定义 API 虚拟化封装为与 Ollama 兼容的 API(运行期间占用 Ollama 端口),从而利用 Copilot 模型选择器中原生的 Ollama 选项。 方法一(目前存在问题) 具体做法可参考修改Copilot chat插件增加自定义模型提供商 这里只说一下这个方法存在的问题: 1. 官方开源的Copilot chat插件版本通常滞后于最新版,可能存在未来兼容性问题 2.

By Ne0inhk