Python Pandas(3):DataFrame
1 介绍
DataFrame 是 Pandas 中的另一个核心数据结构,类似于一个二维的表格或数据库中的数据表。它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值)。DataFrame 既有行索引也有列索引,它可以被看做由 Series 组成的字典(共同用一个索引),提供了各种功能来进行数据访问、筛选、分割、合并、重塑、聚合以及转换等操作。DataFrame 是一个非常灵活且强大的数据结构,广泛用于数据分析、清洗、转换、可视化等任务。
1.1 DataFrame 特点
- 二维结构:
DataFrame是一个二维表格,可以被看作是一个 Excel 电子表格或 SQL 表,具有行和列。可以将其视为多个Series对象组成的字典。 - 列的数据类型: 不同的列可以包含不同的数据类型,例如整数、浮点数、字符串或 Python 对象等。
- 索引:
DataFrame可以拥有行索引和列索引,类似于 Excel 中的行号和列标。 - 大小可变:可以添加和删除列,类似于 Python 中的字典。
- 自动对齐:在进行算术运算或数据对齐操作时,
DataFrame会自动对齐索引。 - 处理缺失数据:
DataFrame可以包含缺失数据,Pandas 使用NaN(Not a Number)来表示。 - 数据操作:支持数据切片、索引、子集分割等操作。
- 时间序列支持:
DataFrame对时间序列数据有特别的支持,可以轻松地进行时间数据的切片、索引和操作。 - 丰富的数据访问功能:通过
.loc、.iloc和.query()方法,可以灵活地访问和筛选数据。 - 灵活的数据处理功能:包括数据合并、重塑、透视、分组和聚合等。
- 数据可视化:虽然
DataFrame本身不是可视化工具,但它可以与 Matplotlib 或 Seaborn 等可视化库结合使用,进行数据可视化。 - 高效的数据输入输出:可以方便地读取和写入数据,支持多种格式,如 CSV、Excel、SQL 数据库和 HDF5 格式。
- 描述性统计:提供了一系列方法来计算描述性统计数据,如
.describe()、.mean()、.sum()等。 - 灵活的数据对齐和集成:可以轻松地与其他
DataFrame或Series对象进行合并、连接或更新操作。 - 转换功能:可以对数据集中的值进行转换,例如使用
.apply()方法应用自定义函数。 - 滚动窗口和时间序列分析:支持对数据集进行滚动窗口统计和时间序列分析。

1.2 创建DataFrame
DataFrame 构造方法如下:
pandas.DataFrame(data=None, index=None, columns=None, dtype=None, copy=False)
data:DataFrame 的数据部分,可以是字典、二维数组、Series、DataFrame 或其他可转换为 DataFrame 的对象。如果不提供此参数,则创建一个空的 DataFrame。index:DataFrame 的行索引,用于标识每行数据。可以是列表、数组、索引对象等。如果不提供此参数,则创建一个默认的整数索引。columns:DataFrame 的列索引,用于标识每列数据。可以是列表、数组、索引对象等。如果不提供此参数,则创建一个默认的整数索引。dtype:指定 DataFrame 的数据类型。可以是 NumPy 的数据类型,例如np.int64、np.float64等。如果不提供此参数,则根据数据自动推断数据类型。copy:是否复制数据。默认为 False,表示不复制数据。如果设置为 True,则复制输入的数据。
1.2.1 使用列表创建
import pandas as pddata = [['Google', 10], ['Bing', 12], ['Wiki', 13]]# 创建DataFrame
df = pd.DataFrame(data, columns=['Site', 'Age'])# 使用astype方法设置每列的数据类型
df['Site'] = df['Site'].astype(str)
df['Age'] = df['Age'].astype(float)print(df)

1.2.2 使用字典创建
import pandas as pddata = {'Site': ['Google', 'Bing', 'Wiki'], 'Age': [10, 12, 13]}df = pd.DataFrame(data)print(df)
1.2.3 使用ndarrays 创建
import numpy as np
import pandas as pd# 创建一个包含网站和年龄的二维ndarray
ndarray_data = np.array([['Google', 10],['Bing', 12],['Wiki', 13]
])# 使用DataFrame构造函数创建数据帧
df = pd.DataFrame(ndarray_data, columns=['Site', 'Age'])# 打印数据帧
print(df)
1.2.4 使用字典(key/value)
import pandas as pddata = [{'a': 1, 'b': 2}, {'a': 5, 'b': 10, 'c': 20}]df = pd.DataFrame(data)print(df)

没有对应的部分数据为 NaN。
1.2.5 从 Series 创建 DataFrame
import pandas as pd# 从 Series 创建 DataFrame
s1 = pd.Series(['Alice', 'Bob', 'Charlie'])
s2 = pd.Series([25, 30, 35])
s3 = pd.Series(['New York', 'Los Angeles', 'Chicago'])
df = pd.DataFrame({'Name': s1, 'Age': s2, 'City': s3})
print(df)

1.3 loc属性
Pandas 可以使用 loc 属性返回指定行的数据,如果没有设置索引,第一行索引为 0,第二行索引为 1,以此类推:
import pandas as pddata = {"calories": [420, 380, 390],"duration": [50, 40, 45]
}# 数据载入到 DataFrame 对象
df = pd.DataFrame(data)# 返回第一行
print(df.loc[0])
# 返回第二行
print(df.loc[1])

返回结果其实就是一个 Pandas Series 数据。也可以返回多行数据,使用 [[ ... ]] 格式,... 为各行的索引,以逗号隔开:
import pandas as pddata = {"calories": [420, 380, 390],"duration": [50, 40, 45]
}# 数据载入到 DataFrame 对象
df = pd.DataFrame(data)# 返回第一行和第二行
print(df.loc[[0, 1]])

返回结果其实就是一个 Pandas DataFrame 数据。我们可以指定索引值,如下实例:
import pandas as pddata = {"calories": [420, 380, 390],"duration": [50, 40, 45]
}df = pd.DataFrame(data, index=["day1", "day2", "day3"])print(df)

Pandas 可以使用 loc 属性返回指定索引对应到某一行:
import pandas as pddata = {"calories": [420, 380, 390],"duration": [50, 40, 45]
}df = pd.DataFrame(data, index=["day1", "day2", "day3"])# 指定索引
print(df.loc["day2"])

2 DataFrame 方法
| 方法名称 | 功能描述 |
|---|---|
head(n) | 返回 DataFrame 的前 n 行数据(默认前 5 行) |
tail(n) | 返回 DataFrame 的后 n 行数据(默认后 5 行) |
info() | 显示 DataFrame 的简要信息,包括列名、数据类型、非空值数量等 |
describe() | 返回 DataFrame 数值列的统计信息,如均值、标准差、最小值等 |
shape | 返回 DataFrame 的行数和列数(行数, 列数) |
columns | 返回 DataFrame 的所有列名 |
index | 返回 DataFrame 的行索引 |
dtypes | 返回每一列的数值数据类型 |
sort_values(by) | 按照指定列排序 |
sort_index() | 按行索引排序 |
dropna() | 删除含有缺失值(NaN)的行或列 |
fillna(value) | 用指定的值填充缺失值 |
isnull() | 判断缺失值,返回一个布尔值 DataFrame |
notnull() | 判断非缺失值,返回一个布尔值 DataFrame |
loc[] | 按标签索引选择数据 |
iloc[] | 按位置索引选择数据 |
at[] | 访问 DataFrame 中单个元素(比 loc[] 更高效) |
iat[] | 访问 DataFrame 中单个元素(比 iloc[] 更高效) |
apply(func) | 对 DataFrame 或 Series 应用一个函数 |
applymap(func) | 对 DataFrame 的每个元素应用函数(仅对 DataFrame) |
groupby(by) | 分组操作,用于按某一列分组进行汇总统计 |
pivot_table() | 创建透视表 |
merge() | 合并多个 DataFrame(类似 SQL 的 JOIN 操作) |
concat() | 按行或按列连接多个 DataFrame |
to_csv() | 将 DataFrame 导出为 CSV 文件 |
to_excel() | 将 DataFrame 导出为 Excel 文件 |
to_json() | 将 DataFrame 导出为 JSON 格式 |
to_sql() | 将 DataFrame 导出为 SQL 数据库 |
query() | 使用 SQL 风格的语法查询 DataFrame |
duplicated() | 返回布尔值 DataFrame,指示每行是否是重复的 |
drop_duplicates() | 删除重复的行 |
set_index() | 设置 DataFrame 的索引 |
reset_index() | 重置 DataFrame 的索引 |
transpose() | 转置 DataFrame(行列交换) |
import pandas as pd# 创建 DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],'Age': [25, 30, 35, 40],'City': ['New York', 'Los Angeles', 'Chicago', 'Houston']
}
df = pd.DataFrame(data)# 查看前两行数据
print('--------查看前两行数据--------')
print(df.head(2))# 查看 DataFrame 的基本信息
print('--------查看 DataFrame 的基本信息--------')
print(df.info())# 获取描述统计信息
print('--------获取描述统计信息--------')
print(df.describe())# 按年龄排序
print('--------按年龄排序--------')
df_sorted = df.sort_values(by='Age', ascending=False)
print(df_sorted)# 选择指定列
print('--------选择指定列--------')
print(df[['Name', 'Age']])# 按索引选择行
print('--------按索引选择行--------')
print(df.iloc[1:3]) # 选择第二到第三行(按位置)# 按标签选择行
print('--------按标签选择行--------')
print(df.loc[1:2]) # 选择第二到第三行(按标签)# 计算分组统计(按城市分组,计算平均年龄)
print('--计算分组统计(按城市分组,计算平均年龄)--')
print(df.groupby('City')['Age'].mean())# 处理缺失值(填充缺失值)
df['Age'] = df['Age'].fillna(30)# 导出为 CSV 文件
df.to_csv('output.csv', index=False)


相关文章:
Python Pandas(3):DataFrame
1 介绍 DataFrame 是 Pandas 中的另一个核心数据结构,类似于一个二维的表格或数据库中的数据表。它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值)。DataFrame 既有行索引也有列索引,它可以被看做由…...
Mac电脑上好用的压缩软件
在Mac电脑上,有许多优秀的压缩软件可供选择,这些软件不仅支持多种压缩格式,还提供了便捷的操作体验和强大的功能。以下是几款被广泛推荐的压缩软件: BetterZip 功能特点:BetterZip 是一款功能强大的压缩和解压缩工具&a…...
BUUCTF_XSS-Lab
xss XSS(Cross - Site Scripting)即跨站脚本攻击,是一种常见的 Web 安全漏洞。攻击者通过在目标网站注入恶意脚本(通常是 JavaScript),当其他用户访问该网站时,这些恶意脚本会在用户的浏览器中执…...
新能源算力战争:为什么AI大模型需要绿色数据中心?
新能源算力战争:为什么AI大模型需要绿色数据中心? 近年来,人工智能(AI)大模型的爆发式增长正在重塑全球科技产业的格局。以GPT-4、Gemini、Llama等为代表的千亿参数级模型,不仅需要海量数据训练,更依赖庞大的算力支撑。然而,这种算力的背后隐藏着一个日益严峻的挑战——…...
ASP.NET Core筛选器Filter
目录 什么是Filter? Exception Filter 实现 注意 ActionFilter 注意 案例:自动启用事务的筛选器 事务的使用 TransactionScopeFilter的使用 什么是Filter? 切面编程机制,在ASP.NET Core特定的位置执行我们自定义的代码。…...
systemverilog的program和module的区别
1. 设计目的 module 硬件建模:用于描述数字电路的结构和行为(如组合逻辑、时序逻辑、连线等)。 层次化设计:支持模块化设计,可嵌套其他模块或接口(interface)。 仿真周期内持续存在࿱…...
Redis性能优化
1.是否使用复杂度过高的命令 首先,第一步,你需要去查看一下 Redis 的慢日志(slowlog)。 Redis 提供了慢日志命令的统计功能,它记录了有哪些命令在执行时耗时比较久。 查看 Redis 慢日志之前,你需要设置慢…...
go gin配置air
一、依赖下载 安装最新,且在你工作区下进行安装,我的是D:/GO是我的工作区,所有项目都在目录下的src, go install github.com/air-verse/airlatest 如果出现类似报错: 将图中第三行 github.com/air-verse/air 替换最…...
【C语言系列】深入理解指针(5)
深入理解指针(5) 一、sizeof和strlen的对比1.1sizeof1.2strlen1.3sizeof和strlen的对比 二、数组和指针笔试题解析2.1 一维数组2.2 字符数组2.2.1代码1:2.2.2代码2:2.2.3代码3:2.2.4代码4:2.2.5代码5&#…...
JVM图文入门
往期推荐 【已解决】redisCache注解失效,没写cacheConfig_com.howbuy.cachemanagement.client.redisclient#incr-CSDN博客 【已解决】OSS配置问题_keyuewenhua.oss-cn-beijing.aliyuncs-CSDN博客 【排坑】云服务器docker部署前后端分离项目域名解析OSS-CSDN博客 微服…...
uv 安装包
是的,你可以使用 uv 来安装 Python 包。uv 是一个高性能的 Python 包安装器和解析器,由 astral.sh 团队开发,旨在替代 pip 和 pip-tools,提供更快的包安装体验。 ### 如何使用 uv 安装包 1. **安装 uv**: 如果你还…...
Level2逐笔成交逐笔委托数据分享下载:20250127
Level2逐笔成交逐笔委托数据分享下载 采用Level2逐笔成交与逐笔委托的毫秒级数据,可以揭露众多有用信息,如庄家策略、伪装交易,让所有交易行为透明化。这对于交易高手的策略分析极为有用,对人工智能领域的机器学习也极为合适&…...
使用 Ollama 在腾讯云服务器环境部署 DeepSeek 大模型实战指南
文章目录 前言Ollama核心特性 实战步骤安装 Ollama验证安装结果部署 DeepSeek 模型拉取模型启动模型 交互体验命令行对话调用 REST API 总结个人简介 前言 近年来,大语言模型(LLM)的应用逐渐成为技术热点,而 DeepSeek 作为国产开…...
C++ 学习:深入理解 Linux 系统中的冯诺依曼架构
一、引言 冯诺依曼架构是现代计算机系统的基础,它的提出为计算机的发展奠定了理论基础。在学习 C 和 Linux 系统时,理解冯诺依曼架构有助于我们更好地理解程序是如何在计算机中运行的,包括程序的存储、执行和资源管理。这对于编写高效、可靠…...
JS:将JS对象格式化为php语法形式(完美支持无unicode编码匹配的正则)
/*** 格式化Object数据为php语法形式* param {*} obj 任意数据* param {String} spaceLen 缩略符长度:必须在2~65536之间,否则默认为2* return {String} 格式化后的PHP语法字符串*/ function formatToPhp(obj, spaceLen) {formatToPhp function (obj, s…...
网络安全 | 零信任架构:重构安全防线的未来趋势
网络安全 | 零信任架构:重构安全防线的未来趋势 一、前言二、零信任架构的核心概念与原理2.1 核心概念2.2 原理 三、零信任架构的关键技术组件3.1 身份管理与认证系统3.2 授权与访问控制系统3.3 网络与安全监测系统3.4 加密与数据保护技术 四、零信任架构与传统安全…...
告别手动操作!用Ansible user模块高效管理 Linux账户
在企业运维环境中,服务器的用户管理是一项基础但非常重要的任务。比如,当有新员工加入时,我们需要在多台服务器上为他们创建账户并分配合适的权限。而当员工离职或岗位发生变化时,我们也需要迅速禁用或删除他们的账户,…...
将Windows下的USB设备共享给WSL(ubuntu)
前言 本文用于学习记录,文中提到的方法也来自于网上资料,如有不对请指出,谢谢! 微软官方参考链接:https://learn.microsoft.com/zh-cn/windows/wsl/connect-usb 如果没有特殊标注,以下命令均在Windows终…...
lneaught SyntaxError :lnexpected tokenPIaYE(at chunk 5728.bdff1b31.is:1:1)
1.遇到问题: lneaught SyntaxError :lnexpected tokenPIaYE(at chunk 5728.bdff1b31.is:1:1) 当我部署到nginx上之后,第一次测试 没有啥问题当我点击登录之后,然后测试一个删除按钮之后就爆这个错误。 2.原因分析: 我遇到的是缓…...
Vue el-input密码输入框 按住显示密码,松开显示*;阻止浏览器密码回填,自写密码输入框;校验输入非汉字内容;文本框聚焦到内容末尾;
输入框功能集合 <template><div style"padding: 10px"><!-- 密码输入框 --><el-input:type"inputType"v-model"password"placeholder"请输入密码"auto-complete"new-password"id"pwd"style…...
Three.js实现炫酷图片粒子化效果:从聚合到扩散的动态演变
一、效果展示 本特效实现了一个基于图片像素的智能粒子系统,通过Three.js引擎驱动,呈现出以下惊艳效果: 图片粒子化:将任意图片转化为动态粒子系统智能聚合扩散:粒子在聚合状态与随机扩散状态间自然过渡物理运动模拟…...
MySQL中like模糊查询如何优化?
大家好,我是锋哥。今天分享关于【MySQL中like模糊查询如何优化?】面试题。希望对大家有帮助; MySQL中like模糊查询如何优化? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在MySQL中,LIKE模糊查询通常会影…...
为什么使用nohup 和 启动的python脚本,进程还在,但是不处理数据
使用 nohup 和 & 启动 Python 脚本后,进程仍然在运行但不处理数据,可能有几个原因: 1. 脚本内部问题(例如死循环、阻塞) Python 脚本内部可能存在阻塞操作或死循环,导致进程不执行预期的任务。你可以…...
Android 约束布局ConstraintLayout整体链式打包居中显示
Android 用约束布局ConstraintLayout实现将多个控件视作一个整体居中显示,使用 app:layout_constraintHorizontal_chainStyle"packed"实现 chain 除了链条方向有横向和竖向区分外, chain链条上的模式有 3种 spread - 元素将被展开&#…...
在 MySQL 8 中配置主从同步(主从复制)是一个常见的需求,用于实现数据的冗余备份、读写分离等。
在 MySQL 8 中配置主从同步(主从复制)是一个常见的需求,用于实现数据的冗余备份、读写分离等。以下是详细的配置步骤: 一、环境准备 假设你有两台 MySQL 服务器: 主服务器(Master):IP 地址为 192.168.1.100,端口为 3306从服务器(Slave):IP 地址为 192.168.1.101,…...
4 前端前置技术(上):AJAX技术、Axios技术(前端发送请求)
文章目录 前言一、Ajax技术(从服务端获取数据,发送各种请求)0 接口文档管理:使用apipost等接口测试软件创建接口便于前端后端分离测试1 基本概念2 原生Ajax使用示例(几年前的早期用法) 二、 Axios技术(对原…...
【自学笔记】Python的基础知识点总览-持续更新
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 Python基础知识总览1. Python简介2. 安装与环境配置3. 基本语法3.1 变量与数据类型3.2 控制结构3.3 函数与模块3.4 文件操作 4. 面向对象编程(OOP&#…...
lambda表达式写java比较器
文章目录 示例 1:按字符串长度比较示例 2:按数字大小比较示例 3:按对象属性比较(简洁:推荐)示例 4:使用 Comparator 的静态方法示例 5:链式比较 在Java中,Comparator 是一…...
vim modeline
1. 什么是 Vim 模型行(modeline)? Vim 模型行是嵌入在文件中的特殊注释行,用于告诉 Vim 编辑器如何配置编辑选项。它的语法格式如下: # vim: 选项1值1:选项2值2:...它以 # vim: 开头(# 是注释符ÿ…...
【赵渝强老师】Spark RDD的依赖关系和任务阶段
Spark RDD彼此之间会存在一定的依赖关系。依赖关系有两种不同的类型:窄依赖和宽依赖。 窄依赖:如果父RDD的每一个分区最多只被一个子RDD的分区使用,这样的依赖关系就是窄依赖;宽依赖:如果父RDD的每一个分区被多个子RD…...
