【神行百里】pandas查询加速之行索引篇

  最近进行大数据处理的时候,发现我以前常用的pandas查询方法太慢了,太慢了,真是太慢了,查阅资料,遂发现了一种新的加速方法,能助力我飞上天,和太阳肩并肩,所以记录下来。


1. 场景说明与数据集构建

  首先,阐述一下我们DataFrame查询应用场景,有两个csv表格文件;

  表1中有两列,一列为id号(index),一列为名字(name);
  表2中有两列,一列为id号(index),一列为名字对应的内容(content);
  此外,表1和表2中的顺序是混乱的,每一行的index都不相同。

  此时,你有一个想法,把name和content对应起来,在一张表中,有名字(name)就知道内容(content)了,我们先用下列代码构建这样一个数据集:

import pandas as pd
from pandas.core.frame import DataFrame
import random
from tqdm import tqdmname = ["一念关山", "奉上", "立剑"]content = ["一念月落,一念身错,一念关山难涉过。棋逢过客,执子者不问因果。", "奉上,唯愿去踏破善恶之叠浪,一心并肩赴跌宕。", "刺予我伤口,重生了魂魄,立剑的时候,疾骤的嘶吼。"]result1 = []
result2 = []
for i in tqdm(range(10000000)):temp = random.randint(0, 2)xx1 = name[temp] + "__" + str(i)xx2 = "YNGS" + "__" + str(i)xx3 = content[temp] + "__" + str(i)result1.append([xx2, xx1])result2.append([xx2, xx3])Frame1 = DataFrame(result1, columns=["index", "name"])
Frame1.to_csv("./test01.csv", index=False)Frame2 = DataFrame(result2, columns=["index", "content"])
shuffled_df = Frame2.sample(frac=1, random_state=42)   # 打乱数据
shuffled_df.to_csv("./test02.csv", index=False)

  代码构建了一个1000万行的数据表,当然了表中数据没有实际意义,仅供测试使用。

来瞅瞅我们生成的数据表格吧~
test01.csv:
在这里插入图片描述

test02.csv:
在这里插入图片描述


2. loc加速查询测试

2.1 原始方法

  有了生成好的数据表,怎么做其实很简单,常规的做法如下虚线中的代码所示,对每一行循环,查询content表中与name表中index相同的行,再取content内容就可以了。

import pandas as pd
from pandas.core.frame import DataFrame
from tqdm import tqdmdata_name = pd.read_csv("./test01.csv", encoding="utf-8")
data_content = pd.read_csv("./test02.csv", encoding="utf-8")name = data_name["name"].values.tolist()
index = data_name["index"].values.tolist()result = []
for i in tqdm(range(len(index))):temp_index = index[i]# -----------------------------------------------------------------------temp_data = data_content[data_content["index"] == temp_index]temp_content = temp_data["content"].values.tolist()[0]# -----------------------------------------------------------------------result.append([temp_index, temp_content])Frame = DataFrame(result, columns=["name", "content"])
Frame.to_csv("./finish.csv", index=False)

  我们来看看运行速度,tqdm显示为725小时,完成这1000万行的数据需要那么久啊!这还能忍,人生苦短,python在手,我要加速 /(ㄒoㄒ)/~~

在这里插入图片描述

2.2 加速方法

  其实 test01.csv 和 test02.csv 有相同的一列,即索引列(index),一般的dataframe的行索引默认为1、2、3…,我们可以设置index列为行索引,采用loc方法查询给定索引名对应的内容,修改代码如下虚线中所示:

import pandas as pd
from pandas.core.frame import DataFrame
from tqdm import tqdmdata_name = pd.read_csv("./test01.csv", encoding="utf-8")
data_content = pd.read_csv("./test02.csv", encoding="utf-8")# -----------------------------------------------------------------------
data_content = data_content.set_index("index")  # 行索引设置
# -----------------------------------------------------------------------name = data_name["name"].values.tolist()
index = data_name["index"].values.tolist()result = []
for i in tqdm(range(len(index))):temp_index = index[i]# ---------------------------------------------------------temp_data = data_content.loc[temp_index]temp_content = [temp_data["content"]]# ---------------------------------------------------------result.append([temp_index, temp_content])Frame = DataFrame(result, columns=["name", "content"])
Frame.to_csv("./finish.csv", index=False)

  设置“index”列为行索引的dataframe长下面这样了,其大小为(10000000, 1)

在这里插入图片描述

  测试一下运行速度,快看家人们,凌波微步再现,飞一般的感觉啊,9秒就完成了4%了,一共只需要几分钟时间即可完成1000万数据处理~

在这里插入图片描述

   由此可见,行索引查询能提速两百多倍,在处理千万级数据时,可以采用该方法神行百里,加速执行嗷o( ̄▽ ̄)ブ,学起来~

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

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

相关文章

跨境独立站优势包括哪些?是否值得做呢?

跨境独立站的优势主要包括: 自主品牌建设:独立站可以更好地展示自主品牌形象,提高品牌知名度和美誉度。 独立域名:独立站可以拥有自己的域名,更加稳定和可信。 自主运营:独立站可以自主运营,包…

低版本echarts的升级到新版5.4.0的echarts浏览器预警和报错信息

新版5.4.0的echarts浏览器预警和报错信息 [ECharts] DEPRECATED: ‘normal’ hierarchy in itemStyle has been removed since 4.0. All style properties are configured in itemStyle directly now. 因为normal层被移除,问题代码如下图所示 itemStyle: {normal:…

MBR30200FCT-ASEMI大电流肖特基MBR30200FCT

编辑:ll MBR30200FCT-ASEMI大电流肖特基MBR30200FCT 型号:MBR30200FCT 品牌:ASEMI 封装:TO-220F 最大平均正向电流:30A 最大重复峰值反向电压:200V 产品引线数量:3 产品内部芯片个数&am…

系统韧性研究(7)| 韧性系统的16大指导原则

不良事件和条件可能会中断系统,导致系统无法提供必要的功能和服务。正如我在本系列的前几篇文章中所概述的那样,韧性是大多数系统的一个基本质量属性,因为它们提供了关键的能力和服务,尽管存在着不可避免的困难,但这些…

文件搜索项目知识介绍

项目背景SQLite介绍SQLite、驱动包下载SQLite使用SQLite和MySQL区别 JDBC搭配SQLiteJDBC原理-创建连接JDBC原理-关闭连接添加和发送SQLJDBC-事务开启和提交 打包.exe文件线程池线程数量问题 项目背景 需求上:因为Windows的文件搜索工具搜索速度十分的慢&#xff1b…

虚幻学习笔记11—C++结构体、枚举与蓝图的通信

一、前言 结构体的定义和枚举类似,枚举的定义有两种方式。区别是结构体必须以“F”开头命名,而枚举不用。 额外再讲了一下蓝图生成时暴露变量的方法。 二、实现 2.1、结构体 1、定义结构体 代码如下,注意这个定义的代码一定要在“UCLASS()”…

从零构建属于自己的GPT系列6:模型本地化部署2(文本生成函数解读、模型本地化部署、文本生成文本网页展示、代码逐行解读)

🚩🚩🚩Hugging Face 实战系列 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在PyCharm中进行 本篇文章配套的代码资源已经上传 从零构建属于自己的GPT系列1:数据预处理 从零构建属于自己的GPT系列2:模型训…

ThinkPHP连接ORACLE数据库教程

目录 概念基本步骤详细操作问题排除参考 概念 要连接Oracle数据库,必须有两个东西,一个PHP官方写的扩展,一个Oracle官方写的客户端PHP是通过扩展去操作oralce客户端连接的服务端数据库,所以两个都不能少,而且版本必须…

大数据讲课笔记1.4 进程管理

文章目录 零、学习目标一、导入新课二、新课讲解(一)进程概述1、基本概念2、三维度看待进程3、引入多道编程模型(1)CPU利用率与进程数关系(2)从三个视角看多进程 4、进程的产生和消亡(1&#xf…

5V低压步进电机驱动芯片GC6150,应用于摄像机,机器人 医疗器械等产品中。具有低噪声、低振动的特点

GC6150是双通道5V低压步进电机驱动器,具有低噪声、低振动的特点,特别适用于相机变焦对焦系统、万向架、摇头机等精度、低噪声STM控制系统,该芯片为每个通道集成了一个256微步的驱动器。通过SPI & T2C接口,客户可以方使地调整驱…

Python+Appium自动化测试之元素等待方法与重新封装元素定位方法

在appium自动化测试脚本运行的过程中,因为网络不稳定、测试机或模拟器卡顿等原因,有时候会出现页面元素加载超时元素定位失败的情况,但实际这又不是bug,只是元素加载较慢,这个时候我们就会使用元素等待的方法来避免这种…

下降路径最小和/最小路径和(dp问题)

1.状态表示 2.状态转移方程 3.初始化 4.填表 从上往下 5.返回值 dp表最后一行的最小值 ------------------------------------------------------------------------------------------------------------------------------- 1.状态表示 2.状态转移方程 3.初始化 4.填表 上…

【教程】app备案流程简单三部曲即可完成

APP备案流程包括以下步骤: 1. 开发者实名认证:在提交备案申请之前,开发者需要通过移动应用开发平台进行实名认证。这个步骤需要提供身份证号码、姓名、联系方式等信息,并上传相关证件照片或扫描件。 2. 应用信息登记&#xff1a…

使用 PyTorch 完全分片数据并行技术加速大模型训练

本文,我们将了解如何基于 PyTorch 最新的 完全分片数据并行 (Fully Sharded Data Parallel,FSDP) 功能用 Accelerate 库来训练大模型。 动机 随着机器学习 (ML) 模型的规模、大小和参数量的不断增加,ML 从业者发现在自己的硬件上训练甚至加…

小程序域名SSL证书能用免费的吗?

众所周知,目前小程序要求域名强制使用https协议,否则无法上线。但是对于大多数开发者来说,为每一个小程序都使用上付费的SSL证书,也是一笔不小的支出。那么小程序能使用免费的SSL证书吗? 答案是肯定的。目前市面上可选…

HCIP---RSTP/MSTP

文章目录 目录 文章目录 前言 一.RSTP诞生背景 二.RSTP对比STP的快速收敛机制 端口角色变化 接口状态变化 RSTP-BPDU 指定端口- P/A机制 BPDU发送变化 端口状态快速切换 优化拓扑变更机制 三.MSTP MSTP诞生背景 MSTP相关概念 MSTP配置 总结 前言 STP协议虽然能够解决环…

记录 | xftp远程连接两台windows

1、打开openssh 设置 -> 应用 -> 可选功能 -> 添加功能 -> OpenSSH 客户端,将 ssh 客户端安装将两台电脑的 ssh 开启,cmd 中输入 net start sshd2、配置 win10 账号密码 3、进行 xftp 连接

租一台服务器多少钱决定服务器的价格因素有哪些

租一台服务器多少钱决定服务器的价格因素有哪些 大家好我是艾西,服务器这个名词对于不从业网络行业的人们看说肯定还是比较陌生的。在21世纪这个时代发展迅速的年代服务器在现实生活中是不可缺少的一环,平时大家上网浏览自己想要查询的信息等都是需要服…

加减乘除简单吗?不,一点都不,利用位运算实现加减乘除(代码中不含+ - * /)

文章目录 🚀前言🚀异或运算以及与运算🚀加法的实现🚀减法的实现🚀乘法的实现🚀除法的实现 🚀前言 这也是阿辉开的新专栏,知识将会很零散不成体系,不过绝对干货满满&…

多维时序 | MATLAB实现SAO-CNN-BiGRU-Multihead-Attention多头注意力机制多变量时间序列预测

多维时序 | MATLAB实现SAO-CNN-BiGRU-Multihead-Attention多头注意力机制多变量时间序列预测 目录 多维时序 | MATLAB实现SAO-CNN-BiGRU-Multihead-Attention多头注意力机制多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 MATLAB实现SAO-CNN-B…