pandas 入门教程:如何从 DataFrame 中选取数据子集(列选择、行过滤与 loc/iloc 实战指南)
pandas 入门教程如何从 DataFrame 中选取数据子集列选择、行过滤与 loc/iloc 实战指南【免费下载链接】pandasFlexible and powerful data analysis / manipulation library for Python, providing labeled data structures similar to R data.frame objects, statistical functions, and much more项目地址: https://gitcode.com/gh_mirrors/pa/pandas本文基于 pandas 官方入门教程《How do I select a subset of a DataFrame?》仓库路径 doc/source/getting_started/intro_tutorials/03_subset_data.rst展开以泰坦尼克号乘客数据doc/data/titanic.csv为实战数据集系统讲解 pandas 中最核心也最常用的数据子集选取方法用方括号[]选取单列/多列、用条件表达式过滤行、用loc/iloc同时选取行与列并完成赋值。读完本文你将掌握 pandas 数据选取的完整工具箱并理解其底层实现机制。准备工作加载 Titanic 数据集本教程使用泰坦尼克号乘客数据集以 CSV 格式存储。首先用pd.read_csv读取import pandas as pd titanic pd.read_csv(doc/data/titanic.csv) titanic.head()数据集的列结构如下详见 doc/source/getting_started/intro_tutorials/includes/titanic.rst列名含义PassengerId每位乘客的编号Survived是否幸存0表示否1表示是Pclass三种舱位等级之一1、2、3Name乘客姓名Sex乘客性别Age乘客年龄岁SibSp同船兄弟姐妹或配偶的数量Parch同船父母或子女的数量Ticket乘客的船票编号Fare票价Cabin乘客的舱房号Embarked登船港口该数据集共 891 行乘客。下文所有示例都建立在这个 DataFrame 之上。如何选取 DataFrame 中的特定列选取单个列返回 Series假如我们只关心泰坦尼克乘客的年龄ages titanic[Age] ages.head()使用方括号[]并在其中放入感兴趣的列名即可选取单个列。注意这里的[]与 Python 列表、字典的取值语法同源——事实上pandas 正是复用了 Python 的__getitem__协议来实现列选取。从源码看DataFrame.__getitem__在 pandas/core/frame.py 中实现当传入的 key 是单个可哈希标量时pandas 通过self.columns.get_loc(key)定位列位置命中唯一列就直接以_get_item(key)返回该列的Series当 key 是列表等 list-like 对象时则走self.columns._get_indexer_strict(key, columns)得到位置索引再通过self.take(indexer, axis1)取回一个DataFrame。这正是选单列得 Series、选多列得 DataFrame这一行为差异的底层来源。可以用type()和shape验证返回类型type(titanic[Age]) # pandas.core.series.Series titanic[Age].shape # (891,)DataFrame 中的每一列都是一个 Series。选取单列时返回的是一个一维的 pandas Series因此shape只返回行数(891,)。这里特别提醒shape是属性attribute不是方法method调用时不要加括号——这与读取/写入教程中的约定一致参见 读取与写入教程 中关于属性的说明。选取多个列返回 DataFrame假如我们同时关心乘客的年龄和性别age_sex titanic[[Age, Sex]] age_sex.head()选取多列时需要在选择方括号[]内放入一个列名列表。注意这里有两层方括号含义完全不同——内层方括号定义的是一个 Python 列表即列名组成的 list外层方括号用于从 pandas DataFrame 中做选取。这是初学者最容易混淆的地方。返回值类型验证type(titanic[[Age, Sex]]) # pandas.core.frame.DataFrame titanic[[Age, Sex]].shape # (891, 2)选择返回了一个包含891 行、2 列的 DataFrame。请记住DataFrame 是二维的同时具有行维度和列维度。如何过滤 DataFrame 中的特定行用条件表达式过滤行布尔索引假如我们想知道年龄大于 35 岁的乘客above_35 titanic[titanic[Age] 35] above_35.head()要基于条件表达式选取行把条件放进选择方括号[]内即可。这里的核心机制是布尔索引boolean indexing。先单独看方括号内的条件titanic[Age] 35条件表达式、、!、、等比较运算符都适用的输出实际上是一个与原始 DataFrame行数相同的布尔值 Series每个元素为True或False。把这个布尔 Series 放入选择方括号[]中pandas 就只会保留值为True的行。从源码可以印证这条路径pandas/core/frame.py 中的__getitem__检测到com.is_bool_indexer(key)后会调用_getitem_bool_array先检查布尔索引长度是否与 DataFrame 行数一致长度不一致会抛出ValueError再通过key.nonzero()得到命中的行位置最终用self.take(indexer, axis0)取出这些行——因此这是一个按位置取行的过滤操作返回的仍是 DataFrame。原始 Titanic DataFrame 共有 891 行看看满足条件的行数above_35.shape # (217, 12)用 isin 过滤行值是否在给定列表中假如我们关心舱位等级为 2 和 3 的乘客class_23 titanic[titanic[Pclass].isin([2, 3])] class_23.head()与条件表达式类似Series.isin条件函数会对每一行返回True/False只要该行的值出现在传入的列表中就返回True。把titanic[Pclass].isin([2, 3])放进选择方括号[]即可完成过滤它检查的是Pclass列的值是否为 2 或 3。从源码看Series.isin定义于 pandas/core/series.py其文档字符串明确说明返回一个布尔 Series表示 Series 中每个元素是否与传入的values序列中的某个元素精确匹配。需要注意一个易错点传入单个字符串会抛出TypeError正确做法是把单个字符串包成一个单元素列表如[A]。如需取反可用~运算符例如~titanic[Pclass].isin([2, 3])表示舱位不是 2 或 3。上面的写法与分别判断Pclass等于 2、等于 3再用|或运算符合并完全等价class_23 titanic[(titanic[Pclass] 2) | (titanic[Pclass] 3)] class_23.head()注意合并多个条件时每个条件都必须用括号()括起来。此外不能使用 Python 关键字or/and而必须使用|或运算符和与运算符。若想取反单个条件使用~非运算符。用 notna 过滤行排除缺失值假如我们只想分析年龄已知的乘客数据age_no_na titanic[titanic[Age].notna()] age_no_na.head()Series.notna条件函数对每一行返回True表示该行的值不是缺失值Null。把它放进选择方括号[]中即可过滤出不含缺失值的行。这里要注意仅看前 5 行时结果可能与原数据完全一样因为前几行年龄恰好都非空。一个可靠的验证方式是检查shape是否发生了变化age_no_na.shape # (714, 12)原始数据有 891 行过滤后只剩 714 行——说明有 177 个乘客的年龄是缺失的已被成功过滤。notna的底层实现位于 pandas/core/indexes/base.py返回numpy.ndarray[np.bool_]类型的布尔数组DataFrame 的布尔索引路径会自动识别并应用它。关于缺失值处理的更多专用函数可参考用户指南中的 缺失数据处理章节。如何同时选取 DataFrame 中的特定行和特定列用 loc 按标签/条件选取行列假如我们想知道年龄大于 35 岁的乘客的姓名adult_names titanic.loc[titanic[Age] 35, Name] adult_names.head()当需要一次性同时选取行和列的子集时仅靠选择方括号[]已经不够了——必须在方括号前加上loc/iloc运算符。使用loc/iloc时逗号之前的部分指定要选取的行逗号之后的部分指定要选取的列。当使用列名、行标签或条件表达式时使用loc运算符。loc逗号前后两部分都支持以下几种形式单个标签single label标签列表list of labels标签切片slice of labels条件表达式conditional expression冒号:表示选取所有行或所有列从源码看loc与iloc都继承自 pandas/core/indexing.py 中的_LocationIndexer基类而_LocIndexerpandas/core/indexing.py与_iLocIndexerpandas/core/indexing.py分别实现了标签驱动与位置驱动两种索引解析逻辑。loc的关键特性是左闭右闭两端都包含且按行/列标签定位iloc则遵循 Python 切片的左闭右开规则按整数位置定位。这是两者最容易踩坑的差异。用 iloc 按位置选取行列假如我们想看第 10 行到第 25 行、第 3 列到第 5 列的数据titanic.iloc[9:25, 2:5]当基于表格中的位置position来选取行和/或列时使用iloc运算符。上面的写法表示行方向取位置 9 到 24Python 切片语义25 不包含列方向取位置 2 到 45 不包含得到的是一个行列子集的 DataFrame。与loc的差异iloc使用与 Python 列表切片一致的左闭右开区间且索引从 0 开始loc使用标签且区间两端都包含。例如titanic.loc[9:25, Age:Fare]与titanic.iloc[9:25, 2:5]看似相近实际语义截然不同。基于 loc/iloc 的选择支持赋值使用loc或iloc选取特定行/列后可以向选中的位置赋予新值。例如把第四列的前 3 个元素改成字符串anonymoustitanic.iloc[0:3, 3] anonymous titanic.iloc[:5, 3]第一行语句选中第 0 到 2 行、第 3 列的区域并整体赋值第二行语句则读取前 5 行的第 3 列用于确认结果——前 3 个值已变为anonymous。赋值的底层由_LocationIndexer._get_setitem_indexerpandas/core/indexing.py负责它会先把基于标签或条件的 key 转换成位置索引器positional indexer再执行写入从而保证loc/iloc的赋值与取值使用同一套解析规则、行为一致。总结与速记以下是本教程的要点速记对应原文档 REMEMBER 框选取数据子集时使用方括号[]在方括号内可以使用单个列/行标签、标签列表、标签切片、条件表达式或冒号loc用于基于标签的选取使用行名/列名区间两端包含iloc用于基于位置的选取使用表格中的整数位置区间左闭右开可以基于loc/iloc的选取结果直接赋值新值。三张示意图分别对应本文的三类操作可对照记忆单列/多列选取titanic[Age]、titanic[[Age, Sex]]、按条件过滤行titanic[titanic[Age] 35]、isin、notna、用loc/iloc同时选取行列titanic.loc[cond, Name]、titanic.iloc[9:25, 2:5]。如需进一步深入本仓库还提供了更系统的资料关于索引与选取的基础知识参见用户指南的 索引与选取数据章节其中包含布尔索引的专门讨论indexing.boolean、isin的专门讨论indexing.basics.indexing_isin以及loc/iloc不同选择方式indexing.choice的对比。原始教程页位于 03_subset_data.rst练习数据为 doc/data/titanic.csv读者可以随时回到仓库中对照源码pandas/core/frame.py、pandas/core/series.py、pandas/core/indexing.py验证本文提到的每一条行为。【免费下载链接】pandasFlexible and powerful data analysis / manipulation library for Python, providing labeled data structures similar to R data.frame objects, statistical functions, and much more项目地址: https://gitcode.com/gh_mirrors/pa/pandas创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

系统提示词泄露攻防:从机制到防守骨架与回归测试

系统提示词泄露攻防:从机制到防守骨架与回归测试

做了三年多 AI 应用,被问得最多的一个问题是"你们的系统提示词是怎么写的"。刚开始我还挺乐意聊,直到有一次,一个用户把我们产品上线两个月后的完整系统提示词几乎一字不差地贴在了公开讨论区里,连里面那句我自己都觉得…

2026/9/19 0:19:45 阅读更多 →
AR-NAR混合Transformer架构:YuE模型原理与Python实战

AR-NAR混合Transformer架构:YuE模型原理与Python实战

1. 项目概述:从“YuE”到AR–NAR MoT——一个被热搜掩盖的前沿生成模型架构最近在Hugging Face社区和Python技术圈里,“YuE”这个词频繁出现在各类讨论帖、模型下载页和代码仓库的README里,甚至衍生出“YuE2”这样的迭代代号。但如果你直接搜…

2026/9/19 0:18:44 阅读更多 →
信息系统运维服务方案标书:从评分表倒推与SLA量化落地

信息系统运维服务方案标书:从评分表倒推与SLA量化落地

简介:这是一份面向企业信息化负责人、运维服务商投标人员及IT运维从业者的信息系统运维服务方案标书范本,可用于投标文件编制、运维体系搭建与内部管理制度参考。压缩包共1个文件,为doc格式文档,整体约1.97MB,内容以章…

2026/9/19 0:18:44 阅读更多 →

最新新闻

AI搜索带来的用户如何进入微信?个人微信API接口与GEO流量承接方案

AI搜索带来的用户如何进入微信?个人微信API接口与GEO流量承接方案

运营链路解决了"用户进来后怎么接",技术方案要解决"用户怎么进来、进来时数据怎么带全"。AI搜索流量的入口分散在各种内容里(技术文章、问答平台、AI引用的资料页),承接技术体系的核心是渠道活码。一、为什么…

2026/9/19 1:08:10 阅读更多 →
网络运维测试题解析:VLAN、STP、OSPF与Python自动化实践

网络运维测试题解析:VLAN、STP、OSPF与Python自动化实践

简介:这份PDF汇集了网络系统建设与运维科目中关于IP地址赋值、OSPF Hello报文、RSTP/STP生成树、VLAN划分与间通信、交换机端口类型等高频考点,以“题目正确答案简要解析”的方式呈现,适合正在备考HCIA/华为网络工程师认证、高校网络基础课程…

2026/9/19 1:07:10 阅读更多 →
宿主组合与 agent preset,TaoToken 换 llm 凭据

宿主组合与 agent preset,TaoToken 换 llm 凭据

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/19 1:07:10 阅读更多 →
Markdown技术文档编写全指南:从入门到精通

Markdown技术文档编写全指南:从入门到精通

1. Markdown入门:为什么开发者都在用它?作为一名技术文档工程师,我清晰地记得第一次接触Markdown时的震撼——这个看似简单的标记语言,彻底改变了我编写技术文档的方式。Markdown诞生于2004年,由John Gruber和Aaron Sw…

2026/9/19 1:07:10 阅读更多 →
Codex 能聊天却一跑工具调用就 400?TaoToken 这样改 model_providers

Codex 能聊天却一跑工具调用就 400?TaoToken 这样改 model_providers

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/19 1:07:10 阅读更多 →
Cursor 连上 TaoToken 后能调通 TypeScript 写的 MCP 服务

Cursor 连上 TaoToken 后能调通 TypeScript 写的 MCP 服务

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/19 1:07:10 阅读更多 →

日新闻

BP神经网络时序预测:滑窗长度与多窗口平均策略

BP神经网络时序预测:滑窗长度与多窗口平均策略

简介:面向机器学习、深度学习与数据建模学习者的一份完整研究文献,聚焦BP神经网络在农业产量预测中的应用。文档以1980—2018年全国棉花产量为样本,系统讲解数据归一化处理、激活函数原理、多层神经网络结构搭建及训练流程,展示敏…

2026/9/19 0:00:30 阅读更多 →
Transformer训练实时监控实战:基于MindSpore的损失曲线可视化方案

Transformer训练实时监控实战:基于MindSpore的损失曲线可视化方案

上个月调一个Deformable DETR模型,在单卡上要跑将近两天。第二天早上我下意识打开终端翻日志,发现loss从凌晨两点就开始往上爬,一路从0.8涨到1.35,整整六个小时没人发现。那六个小时的训练不仅白跑,还霸占着卡——等于…

2026/9/19 0:00:30 阅读更多 →
OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南

OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南

OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南 【免费下载链接】opencloud 🌤️ OpenCloud is the open source platform for file management, sharing and collaboration. Simple and sovereign. 项目地址: htt…

2026/9/19 0:00:30 阅读更多 →

周新闻

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验 【免费下载链接】ai The AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and ag…

2026/9/16 19:03:19 阅读更多 →
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化 【免费下载链接】refine A React Framework for building internal tools, admin panels, dashboards & B2B apps with unmatched flexibility. 项目地址: https://gitcode.com/GitH…

2026/9/17 7:57:36 阅读更多 →
Flutter应用改名全指南:从Android到iOS的配置与工具实践

Flutter应用改名全指南:从Android到iOS的配置与工具实践

刚接一个外包项目时,甲方要求把工程里临时用的应用名改成正式产品名。我本来觉得“改名”这种小事,打开配置文件改一行不就完了?结果真动手才发现,Flutter项目里“应用名称”根本不是一处配置,而是一整套散落在 Androi…

2026/9/17 10:19:14 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/16 22:31:27 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/15 21:39:18 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/16 22:32:59 阅读更多 →