Pandas 操作指南(一):DataFrame 的构建与表格数据组织

news2026/4/3 8:12:55
在数据分析与数据处理中原始数据往往并不是一开始就以规范表格的形式出现。它可能来自列表list、字典dict、CSV/Excel 文件或程序运行过程中临时生成的数据集合。若这些数据尚未被整理为结构明确的表格对象后续的数据选取、清洗、统计与可视化操作便缺乏统一基础。Pandas 的核心任务之一正是将原始数据组织为可计算、可检查、可分析的表格结构。其中最重要的数据结构是 DataFrame。本文以一张学生成绩表为贯穿示例说明如何将原始数据整理成 DataFrame并在此基础上认识其基本结构、内容查看方式以及常见检查方法。例如希望得到的成绩表如下学号姓名班级语文数学英语S001张三C01889285S002李四C01768179S003王五C02908793S004赵六C02858988S005孙七C03919590S006周八C03788480下面将围绕这张表说明如何把原始数据整理成 Pandas 中的 DataFrame。一、为什么要先学会使用表格数据在 Python 中列表、字典、元组等数据类型都可以保存数据但当数据本身具有明确的行列结构时仅用这些通用容器来组织数据往往不利于后续分析。以学生成绩数据为例这类数据通常具有如下特点• 每一行对应一个对象• 每一列对应一个字段Field• 不同对象在相同字段上具有可比较性若数据仍停留在原始列表或字典的层面则行列关系、字段含义与结构边界往往不够清晰。此时虽然数据已经被保存但尚未被整理为适合分析的表格形式。Pandas 中的数据选取、筛选、清洗、统计与合并等操作均以表格结构为基础。因此学习 Pandas 的起点不是立即进行复杂分析而是先将原始数据整理成结构清晰的 DataFrame。二、认识 DataFrame 和 SeriesPandas 中最核心的两种数据结构是• DataFrame• Series其中DataFrame 用于表示二维表格数据Series 用于表示一维带标签数据。1、DataFrameDataFrame 是 Pandas 提供的二维带标签数据结构two-dimensional labeled data structure。它既包含二维数据值又包含用于标识各行和各列的标签信息。下面先将学生成绩原始数据整理成一个 DataFrame并统一命名为 scoresimport pandas as pd data [ {学号: S001, 姓名: 张三, 班级: C01, 语文: 88, 数学: 92, 英语: 85}, {学号: S002, 姓名: 李四, 班级: C01, 语文: 76, 数学: 81, 英语: 79}, {学号: S003, 姓名: 王五, 班级: C02, 语文: 90, 数学: 87, 英语: 93}, {学号: S004, 姓名: 赵六, 班级: C02, 语文: 85, 数学: 89, 英语: 88}, {学号: S005, 姓名: 孙七, 班级: C03, 语文: 91, 数学: 95, 英语: 90}, {学号: S006, 姓名: 周八, 班级: C03, 语文: 78, 数学: 84, 英语: 80}] scores pd.DataFrame(data)print(scores)输出学号 姓名 班级 语文 数学 英语0 S001 张三 C01 88 92 851 S002 李四 C01 76 81 792 S003 王五 C02 90 87 933 S004 赵六 C02 85 89 884 S005 孙七 C03 91 95 905 S006 周八 C03 78 84 80从结构上看可将其理解为行索引学号姓名班级语文数学英语0S001张三C018892851S002李四C017681792S003王五C029087933S004赵六C028589884S005孙七C039195905S006周八C03788480在这张结构表中• 最左侧一列是行索引Index• 第一行中的“学号、姓名、班级、语文、数学、英语”是列标签Columns• 中间区域是数据值区域因此DataFrame 可以概括为由数据值、行索引和列标签共同构成的二维表格对象。2、SeriesSeries 是 Pandas 提供的一维带标签数据结构one-dimensional labeled data structure。将 DataFrame 看作整张表则其中的单列数据通常可以理解为一个 Series。例如scores[数学] 的结果通常就是一个 Series。math_scores scores[数学]print(math_scores)输出0 921 812 873 894 955 84Name: 数学, dtype: int64由此可见Series 并非单纯的一列值而是“一列值 一组标签”的组合。因此可以将二者概括为• Series 是一维的• DataFrame 是二维的• DataFrame 中的单列数据通常可视为 Series三、构建 DataFrame在 Pandas 中构建 DataFrame 最常用的方法是 pd.DataFrame()。构建一张表时通常需要明确三项内容• 数据值• 行的组织方式• 列标签的名称一般来说最常用的构建方式主要有三种由字典构建、由列表嵌套列表构建以及由字典列表构建。1、由值为列表的字典构建若原始数据已经按列组织则字典是最自然的输入形式。字典的键会成为列标签各键对应的列表会成为各列数据。示例import pandas as pd data { 学号: [S001, S002, S003, S004, S005, S006], 姓名: [张三, 李四, 王五, 赵六, 孙七, 周八], 班级: [C01, C01, C02, C02, C03, C03], 语文: [88, 76, 90, 85, 91, 78], 数学: [92, 81, 87, 89, 95, 84], 英语: [85, 79, 93, 88, 90, 80]} scores pd.DataFrame(data)print(scores)若需要显式控制列顺序也可以指定 columns 参数scores pd.DataFrame( data, columns[学号, 姓名, 班级, 语文, 数学, 英语]) print(scores)2、由列表嵌套列表构建若原始数据按行组织即每个内部列表表示一行数据则可以使用列表嵌套列表的形式。data [ [S001, 张三, C01, 88, 92, 85], [S002, 李四, C01, 76, 81, 79], [S003, 王五, C02, 90, 87, 93], [S004, 赵六, C02, 85, 89, 88], [S005, 孙七, C03, 91, 95, 90], [S006, 周八, C03, 78, 84, 80]] scores pd.DataFrame( data, columns[学号, 姓名, 班级, 语文, 数学, 英语])print(scores)当输入是二维列表时Pandas 无法自动获知每一列的字段含义因此通常应主动提供 columns 参数否则列标签会使用默认整数索引。3、由字典列表构建若原始数据是一条记录Record对应一个字典则可以直接使用字典列表构建 DataFrame。此类形式在接口数据、JSON 数据与对象集合中较为常见。这正是本文第二节 data 变量所采用的组织方式。示例同第二节的 DataFrame 构建示例。4、选择合适的构建方式构建 DataFrame 时不必刻意追求单一写法更重要的是顺着原始数据的组织方式进行选择。一般来说• 数据按“列”组织用“值为列表的字典”• 数据按“行”组织用“列表嵌套列表”• 数据按“记录”组织用“字典列表”四、表格的行、列与标签将原始数据整理成 DataFrame 之后首先需要准确理解这张表的结构。从表格语义看一张 DataFrame 至少包含三个核心层面• 行Row• 列Column• 标签Label1、行在学生成绩表中每一行对应一名学生的数据。例如第 0 行对应学号为 S001 的学生张三第 1 行对应学号为 S002 的学生李四。在表格数据中一行通常表示• 一个对象• 一条记录• 一次观察结果2、列在这张表中每一列对应一个字段Field学号姓名班级语文数学英语列通常表示对象的属性、指标或特征。后续分析通常围绕列展开例如比较数学成绩、统计英语平均分或按班级观察成绩分布。3、行索引行索引Index位于表格左侧用于标识各行。print(scores.index)输出示意RangeIndex(start0, stop6, step1)在当前示例中Pandas 自动生成了从 0 开始的默认整数索引。需要注意“行”与“行索引”并不是同一个概念前者是记录本身后者是用来标识这些记录的位置或标签。4、列标签列标签Columns位于表格上方用于标识各列的含义。print(scores.columns)输出示意Index([学号, 姓名, 班级, 语文, 数学, 英语], dtypeobject)列标签是后续数据选取、筛选、统计与绘图的重要基础。列名越明确后续操作越自然。5、学号与索引的区别在当前成绩表中“学号”具有明确业务含义能够唯一标识学生但它暂时仍作为普通列保留并不等同于行索引。索引属于 DataFrame 的标签结构而“学号”属于表中的业务字段二者可以一致也可以不同。五、查看表格内容当 DataFrame 构建完成后通常应按“先看内容、再看结构、最后看类型”的顺序进行初步检查。1、查看整张表若数据量较小可以直接输出整个 DataFrameprint(scores)这种方式适合小型表格。2、查看前几行更常见的做法是使用 head() 先查看前几行print(scores.head())head() 默认显示前 5 行常用于检查• 列名是否正确• 数据是否已成功构建• 字段顺序是否合理• 前几条数据是否符合预期3、查看后几行若需要检查表格末尾的数据可以使用 tail()print(scores.tail())tail() 默认显示后 5 行适合用于检查数据末尾是否完整。六、表格的整体结构在查看内容之后还需要从整体上认识这张表。这一部分主要关注表格的尺寸、列集合以及索引形式。1、表格形状表格的形状shape由“行数”和“列数”组成print(scores.shape)输出(6, 6)这表示该表共有 6 行、6 列。2、列集合可以再次通过 columns 查看表中包含哪些字段print(scores.columns)这一步有助于核对表格结构是否完整。3、索引形式可以通过 index 查看表格当前采用的索引形式print(scores.index)这一步有助于判断表格使用的是默认索引还是已经设置了自定义索引。七、数据类型与基本信息构建 DataFrame 后还需要检查各列的数据类型Data Type是否合理。这是后续计算与统计能够正常进行的重要前提。在当前成绩表中学号、姓名、班级通常应为文本型数据语文、数学、英语通常应为数值型数据。1、查看基本信息可以使用 info() 查看整张表的基本信息scores.info()它通常包含以下内容• 行数与索引范围• 每列的非空值数量• 每列的数据类型• 内存占用信息该方法可用于检查缺失情况与各列类型是否合理。2、查看各列数据类型若只需查看各列的数据类型可以使用 dtypes 属性print(scores.dtypes)输出结果类似于学号 object姓名 object班级 object语文 int64数学 int64英语 int64dtype: object这说明“学号”“姓名”“班级”为文本型列“语文”“数学”“英语”为整数型列。这样的类型结构符合这张成绩表的实际语义。八、综合示例下面给出一个完整示例从原始数据出发构建 scores 这一 DataFrame并对其内容、结构与数据类型进行初步检查。import pandas as pd students [ {学号: S001, 姓名: 张三, 班级: C01, 语文: 88, 数学: 92, 英语: 85}, {学号: S002, 姓名: 李四, 班级: C01, 语文: 76, 数学: 81, 英语: 79}, {学号: S003, 姓名: 王五, 班级: C02, 语文: 90, 数学: 87, 英语: 93}, {学号: S004, 姓名: 赵六, 班级: C02, 语文: 85, 数学: 89, 英语: 88}, {学号: S005, 姓名: 孙七, 班级: C03, 语文: 91, 数学: 95, 英语: 90}, {学号: S006, 姓名: 周八, 班级: C03, 语文: 78, 数学: 84, 英语: 80}] # 构建 DataFramescores pd.DataFrame(students) # 查看前几行print( 前几行 )print(scores.head()) # 查看后几行print(\n 后几行 )print(scores.tail()) # 查看表格形状print(\n 表格形状 )print(scores.shape) # 查看列标签print(\n 列标签 )print(scores.columns) # 查看行索引print(\n 行索引 )print(scores.index) # 查看数据类型print(\n 数据类型 )print(scores.dtypes) # 查看基本信息print(\n 基本信息 )scores.info()该示例体现了本篇的基本任务流程1、将原始数据整理为 DataFrame2、查看表格内容3、检查表格结构4、确认数据类型与基本状态完成这些步骤后数据便已进入可继续处理的标准表格阶段。 小结DataFrame 是 Pandas 中最核心的二维表格数据结构。将原始数据整理成 DataFrame是后续数据选取、清洗、统计与分析的前提。本文围绕学生成绩表介绍了 DataFrame 与 Series 的基本含义、常见构建方式以及表格内容、结构和数据类型的基本检查方法。掌握这些内容才能为后续的数据处理操作建立稳定基础。延伸阅读《Pandas构建 Seriess》《Pandas构建 DataFrame》“点赞有美意赞赏是鼓励”

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2478200.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…