【神行百里】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.pswp.cn/news/215968.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/215968.shtml
英文地址,請注明出處:http://en.pswp.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客戶端連接的服務端數據庫,所以兩個都不能少,而且版本必須…

【數組】-Lc34-在排序數組中查找元素的第一個和最后一個位置(二分查找 + 兩邊擴展)

寫在前面 最近想復習一下數據結構與算法相關的內容,找一些題來做一做。如有更好思路,歡迎指正。 目錄 寫在前面一、場景描述二、具體步驟1.環境說明2.代碼 寫在后面 一、場景描述 給定一個按照升序排列的整數數組 nums,和一個目標值 target。…

大數據講課筆記1.4 進程管理

文章目錄 零、學習目標一、導入新課二、新課講解(一)進程概述1、基本概念2、三維度看待進程3、引入多道編程模型(1)CPU利用率與進程數關系(2)從三個視角看多進程 4、進程的產生和消亡(1&#xf…

5V低壓步進電機驅動芯片GC6150,應用于攝像機,機器人 醫療器械等產品中。具有低噪聲、低振動的特點

GC6150是雙通道5V低壓步進電機驅動器,具有低噪聲、低振動的特點,特別適用于相機變焦對焦系統、萬向架、搖頭機等精度、低噪聲STM控制系統,該芯片為每個通道集成了一個256微步的驅動器。通過SPI & T2C接口,客戶可以方使地調整驅…

Python+Appium自動化測試之元素等待方法與重新封裝元素定位方法

在appium自動化測試腳本運行的過程中,因為網絡不穩定、測試機或模擬器卡頓等原因,有時候會出現頁面元素加載超時元素定位失敗的情況,但實際這又不是bug,只是元素加載較慢,這個時候我們就會使用元素等待的方法來避免這種…

C++ c_str()用法

標準庫的string類提供了3個成員函數來從一個string得到c類型的字符數組:c_str()、data()、copy(p,n)。 c_str()是Borland封裝的String類中的一個函數,它返回當前字符串的首字符地址。換種說法,c_str()函數返回一個指向正規C字符串的常量指針(…

下降路徑最小和/最小路徑和(dp問題)

1.狀態表示 2.狀態轉移方程 3.初始化 4.填表 從上往下 5.返回值 dp表最后一行的最小值 ------------------------------------------------------------------------------------------------------------------------------- 1.狀態表示 2.狀態轉移方程 3.初始化 4.填表 上…

【CVPR 2022】解讀 Controllable Animation of Fluid Elements in Still Images:光流法視頻生成

Diffusion Models視頻生成-博客匯總 前言:用戶輸入箭頭,就能讓圖像動起來,這是經典的Animating任務。CVPR 2022中的一篇經典論文《Controllable Animation of Fluid Elements in Still Images》使用光流法做這種image-to-video任務,很多做法值得借鑒,這篇博客詳細這篇論文…

【教程】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協議雖然能夠解決環…

TypeScript中的函數注釋

一. 概覽 函數注釋主要分為顯示注釋、類型推斷、隱式的any&#xff0c;現在來詳細總結下 二. 顯示注釋 舉個例子 let str1: string hello,jacklet intArr: number[] [1,2,3] let strArr&#xff1a;Array<string> [1,2,3]function test(a: number,b: number): num…