【神行百里】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.hqwc.cn/news/267920.html

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

相关文章

HyperGCN代码复现

环境:python3.6.7,torch0.4,外加pyyaml。 问题1:TypeError: cant convert np.ndarray of type numpy.intc. The only supported types are: double, float, float16, int64, int32, and uint8. 解决办法: 复现结果: …

weblogic部署应用包(从开发到部署)

想了解下weblogic部署流程,由于电脑没有应用程序,所以自己搞个test.war应用程序测试 软件 1-软件:jdk版本 2-path变量值增加:%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPow…

力扣每日一题:2454. 下一个更大元素 IV(2023-12-12)

力扣每日一题(今天的困难题,没有想到太好的方法,执行用时太久了) 题目:2454. 下一个更大元素 IV 日期:2023-12-12 用时:35 m 09 s 时间:614ms 内存:57.18MB 代码&#x…

moogose使用

概念 Node.js 的优雅 mongodb 对象建模 Mongoose 提供了一种直接的、基于模式的解决方案来对应用程序数据进行建模。它包括开箱即用的内置类型转换、验证、查询构建、业务逻辑挂钩等 安装 npm i mongoose具体例子 E:\Nextjs\mongoose-use-demo\app\api[crud]\route.ts 连接…

液态二氧化碳储存罐远程无线监测系统

二氧化碳强化石油开采技术,须先深入了解石油储层的地质特征和二氧化碳的作用机制。现场有8辆二氧化碳罐装车,每辆罐车上有4台液态二氧化碳储罐,每台罐的尾部都装有一台西门子S7-200 smart PLC。在注入二氧化碳的过程中,中控室S7-1…

算法:买卖股票的最佳时机(快慢指针和动态规划)

快慢指针 时间复杂度 O(n) 空间复杂度 O(1) /*** param {number[]} prices* return {number}*/ var maxProfit function (prices) {let l 0let r 1let temp 0while (r < prices.length - 1) {// 如果当前左值大于右值说明当前不是最佳买入时机// 所以将右指针赋值给左指…

Amazon CodeWhisperer 审查:最新的 AI 代码伴侣

最近&#xff0c;亚马逊云科技宣布了一项机器学习支持的服务&#xff0c;该服务通过根据开发人员在自然语言中的评论和他们在集成开发环境中的代码生成代码建议来帮助提高开发人员的工作效率。这项名为 Amazon CodeWhisprer 的服务仍处于预览阶段&#xff0c;可以免费使用。这项…

strict-origin-when-cross-origin

严格限制同源策略 &#xff08;1&#xff09;允许服务器的同源IP地址访问 &#xff08;2&#xff09;允许Referer --- 后端服务器要配置

plf::list原理分析

plf::list是一个比std::list性能要好的另外一种实现&#xff0c;根据作者的性能测试&#xff1a; 293% faster insertion 57% faster erasure 17% faster iteration 77% faster sorting 70% faster reversal 91% faster remove/remove_if 63% faster unique 811% faster clear …

kettle+report designer导出带样式的excel包含多个sheet页

场景介绍&#xff1a; 运用pentaho report designer报表设计器&#xff0c;查询数据库字典表生成带有样式的excel&#xff0c;通过kettle pentaho报表输出组件导出形成数据字典&#xff0c;最终形成的数据字典样式如下图&#xff1a; 案例适用范围&#xff1a; pentaho repor…

智物发布MT6877平台无线AR智能眼镜参考设计,推动下一代无线AR发展

随着增强现实(AR)技术的不断发展&#xff0c;有线AR眼镜在连接和使用方面存在一些限制。为了解决这些问题&#xff0c;无线AR智能眼镜的推出势在必行。 新一代无线AR智能眼镜采用了天玑900&#xff08;MT6877&#xff09;平台作为参考设计&#xff0c;搭载了2.4GHz的八核处理器…

c/c++ 柔性数组

在C99新增特性中&#xff0c;结构体的 最后一个元素 允许是 未知大小的数组 &#xff0c;这样就叫做柔性数组成员。 struct stu{ int i&#xff1b; char c; int arr[ ]; //未知大小数组&#xff0c;并且是整个结构体最后一个成员 } 这个时候结构体所占字节空间是多少&#xf…