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

医疗AI场景下算法编程的深度解析(2026新生培训讲稿)(八)

医疗AI场景下算法编程的深度解析(2026新生培训讲稿)(八)

第15章 模型融合与集成策略 在机器学习竞赛和实际应用中,模型融合(Model Ensemble)是提升预测性能的利器。通过组合多个不同的基模型,集成策略能够综合各个模型的优势,抵消单个模型的偏差和方差,从而获得比任何单一模型更稳定、更准确的预测结果。在医疗AI领域,模型融合同样具有重要价值——面对复杂多模态的医疗数据,单一模型往往难以全面捕捉所有信息,而融合多个异质模型可以提升诊断的鲁棒性和准确性。本章将从集成学习的基本思想出发,系统介绍常见的模型融合方法,包括投票法、平均法、Stacking、Blending等,并通过实战案例展示如何构建融合模型来提升疾病预测性能。 15.1 集成学习的基本思想 集成学习(Ensemble Learning)的核心思想是“三个臭皮匠,顶个诸葛亮”——通过结合多个学习器来完成学习任务,通常可以获得比单一学习器更优越的泛化性能。根据个体学习器的生成方式,集成学习主要分为两大类: * Bagging:并行训练多个独立的基学习器,然后通过平均或投票进行结合。典型代表是随机森林。Bagging主要降低方差。 * Boosting:串行训练基学习

By Ne0inhk
人工智能:自然语言处理在教育领域的应用与实战

人工智能:自然语言处理在教育领域的应用与实战

人工智能:自然语言处理在教育领域的应用与实战 学习目标 💡 理解自然语言处理(NLP)在教育领域的应用场景和重要性 💡 掌握教育领域NLP应用的核心技术(如智能问答、作业批改、个性化学习) 💡 学会使用前沿模型(如BERT、GPT-3)进行教育文本分析 💡 理解教育领域的特殊挑战(如多学科知识、学生认知差异、数据隐私) 💡 通过实战项目,开发一个智能问答系统应用 重点内容 * 教育领域NLP应用的主要场景 * 核心技术(智能问答、作业批改、个性化学习) * 前沿模型(BERT、GPT-3)在教育领域的使用 * 教育领域的特殊挑战 * 实战项目:智能问答系统应用开发 一、教育领域NLP应用的主要场景 1.1 智能问答 1.1.1 智能问答的基本概念 智能问答是通过自然语言与用户进行交互,回答用户问题的程序。在教育领域,智能问答的主要应用场景包括: * 课程问答:回答课程相关的问题(如“什么是机器学习”

By Ne0inhk
2026年3月18日 AI 每日动态

2026年3月18日 AI 每日动态

1. 【AI Coding 工具】Claude Code 终于有了"长期记忆"——claude-mem 爆红 Claude Code 用起来顺手,但每次开新会话就像把同事的记忆清零——项目背景要重新交代,之前做过的决策一问三不知。现在有个叫 claude-mem 的开源插件彻底改变了这件事。 它的工作方式很直接:自动抓取每次会话里的工具调用记录(读了哪些文件、改了哪些代码、跑了什么命令),会话结束后用 AI 把这些信息压缩成结构化摘要,下次开工时自动注入进来。一万 Token 的操作记录,最终压缩到 500 Token 左右,同时还支持自然语言检索历史("上次那个 React 重复渲染是怎么解的?")。 目前已有超 3 万人收藏,宣称能节省 90% 的 Token

By Ne0inhk
2026年AI Agent框架王者:OpenClaw登顶GitHub TOP1,16大小龙虾生态项目(含OpenClawChinese汉化版)技术特性与GitHub地址汇总

2026年AI Agent框架王者:OpenClaw登顶GitHub TOP1,16大小龙虾生态项目(含OpenClawChinese汉化版)技术特性与GitHub地址汇总

🦞 "OpenClaw龙虾家族"全员集结!OpenClaw登顶GitHub TOP1,Kimi/miniMax/阿里/百度/字节/网易集体入局,16大小龙虾框架谁是你的菜? 🔥 历史性时刻:2026年3月,OpenClaw以26万+ GitHub Stars正式超越React(24.3万星)和Linux(21.8万星),登顶全球开源项目TOP1!但这只是开始——随着Kimi AI、MiniMax、阿里、百度、字节、网易等巨头集体入局,加上NullClaw、OpenFang等新锐开源项目崛起,一个庞大的 “龙虾家族” 正在形成。 生态全景数据:⭐ OpenClaw:26万+ Stars,GitHub史上最快增长记录🌙 KimiClaw:Moonshot AI官方云托管,40GB云存储+5000技能⚡ MaxClaw:MiniMax出品,10秒部署,

By Ne0inhk