国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Pandas:如何讓你的代碼性能飆升

這篇具有很好參考價(jià)值的文章主要介紹了Pandas:如何讓你的代碼性能飆升。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

在數(shù)據(jù)分析相關(guān)的工作中,Pandas無疑是一個(gè)強(qiáng)大的工具,它的易用性和靈活性廣受青睞。
然而,隨著數(shù)據(jù)量的不斷增長和計(jì)算需求的日益復(fù)雜,Pandas代碼的性能問題也逐漸浮出水面。
如何讓Pandas代碼運(yùn)行得更快、更高效,成為了每一個(gè)人使用者都需要面對(duì)的挑戰(zhàn)。

今天,本文就一個(gè)簡化版的實(shí)際分析案例,來一起探討Pandas代碼如何寫才能性能更好,讓你的數(shù)據(jù)處理流程更加順滑,不再為漫長的等待運(yùn)行而煩惱。

1. 案例介紹

假設(shè)有個(gè)股票分析的場景,我們需要給所有的股票每天的交易情況做一個(gè)評(píng)估,評(píng)估的結(jié)果有3個(gè)級(jí)別:優(yōu),,。
其中,“優(yōu)”的條件是當(dāng)天成交額大于10億收盤價(jià)大于開盤價(jià),也就是股票上漲;
“差”的條件是當(dāng)天成交額小于1億收盤價(jià)小于開盤價(jià),也就是股票下跌;
除此之外的情況就是“中”。

再次強(qiáng)調(diào)一下,這是一個(gè)簡化的評(píng)估方法,主要是為了下面演示Pandas的代碼性能,真實(shí)的評(píng)估不會(huì)如此粗糙。

股票交易的數(shù)據(jù)來自A股2024年1,2月份的日交易數(shù)據(jù),大約20多萬條。
數(shù)據(jù)可從地址 https://databook.top/stock/2024 下載。

導(dǎo)入數(shù)據(jù):

import pandas as pd

# 這個(gè)路徑根據(jù)實(shí)際情況修改
fp = r'D:\data\2024\歷史行情數(shù)據(jù)-東財(cái)-不復(fù)權(quán)-2024.csv'

df = pd.read_csv(fp)
df = df.loc[:, ["股票代碼", "日期", "開盤", "收盤", "最高", "最低", "成交量"]]
df

Pandas:如何讓你的代碼性能飆升

2. 不同寫法的性能比較

下面是3種代碼的寫法都是基于pandas的,完成的功能也是一樣的。

2.1. 循環(huán)遍歷

給每條數(shù)據(jù)加一個(gè)評(píng)估的指標(biāo),最直接想到的方法就是遍歷所有的數(shù)據(jù),然后根據(jù)每條數(shù)據(jù)的情況,
給予一個(gè)評(píng)估指標(biāo)(優(yōu),中,差)。

首先,封裝一個(gè)評(píng)估一條數(shù)據(jù)的函數(shù):

def eval_stock(row):
    """
    評(píng)估一條的數(shù)據(jù)
    """
    # 成交額
    volumn = row["收盤"] * row["成交量"]
    
    if volumn > 1_000_000_000 and row["收盤"] > row["開盤"]:
        return "優(yōu)"

    if volumn < 100_000_000 and row["收盤"] < row["開盤"]:
        return "差"

    return "中"

然后用遍歷的方式評(píng)估我們準(zhǔn)備的數(shù)據(jù)(A股2024年1,2月份的日交易數(shù)據(jù))。

for idx, row in df.iterrows():
    df.loc[idx, "評(píng)估"] = eval_stock(row)

df

Pandas:如何讓你的代碼性能飆升

雖然只有20多萬條數(shù)據(jù),但是執(zhí)行時(shí)間還挺長的,在jupyter notebook 中用 %%timeit 魔法函數(shù)測試性能如下。

%%timeit
for idx, row in df.iterrows():
    df.loc[idx, "評(píng)估"] = eval_stock(row)

運(yùn)行結(jié)果:

36.4 s ± 367 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

執(zhí)行一次要36秒多,效率很低。

2.2. apply方法

apply方法是pandas提供的一種靈活處理數(shù)據(jù)的接口,它允許我們傳入一個(gè)自定義函數(shù)來處理數(shù)據(jù)。
下面我們看看這種方式的性能如何。

%%timeit
df["評(píng)估"] = df.apply(eval_stock, axis=1)

運(yùn)行結(jié)果:

4.9 s ± 86.5 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

性能提升非常明顯(36.4秒->4.9秒),代碼也變得更加簡潔。

2.3. 向量化方法

最后,我們看看終極的寫法,這種寫法把pandas的數(shù)據(jù)結(jié)構(gòu)DataFrame看成是一個(gè)一維的向量數(shù)組(每列一個(gè)向量),而不是一個(gè)二維的數(shù)值數(shù)組。
這樣,我們操作數(shù)據(jù)是以為單位來操作,看看這樣寫的性能如何:

%%timeit
df["評(píng)估"] = "中"
df.loc[
    (df["收盤"] * df["成交量"] > 1_000_000_000) & (df["收盤"] > df["開盤"]),
    "評(píng)估",
] = "優(yōu)"
df.loc[
    (df["收盤"] * df["成交量"] < 100_000_000) & (df["收盤"] < df["開盤"]), "評(píng)估"
] = "差"

運(yùn)行結(jié)果:

8.22 ms ± 434 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)

運(yùn)行時(shí)間幾乎可以忽略不計(jì)。

3. 總結(jié)

同樣使用pandas寫數(shù)據(jù)分析的代碼,性能差距居然會(huì)如此天差地別。

可見,學(xué)習(xí)pandas,不僅僅是學(xué)習(xí)它的各種接口和函數(shù),
更重要的是了解從pandas執(zhí)行的角度應(yīng)該如何看待數(shù)據(jù),是把數(shù)據(jù)看成一個(gè)一個(gè)獨(dú)立的值,還是一行一行或一列一列的向量。
只有這樣,才能用pandas高效的處理數(shù)據(jù),這在數(shù)據(jù)量膨脹之后,會(huì)大大提高我們分析的效率。文章來源地址http://www.zghlxwxcb.cn/news/detail-841250.html

到了這里,關(guān)于Pandas:如何讓你的代碼性能飆升的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • LoadRunner參數(shù)化最佳實(shí)踐:讓你的性能測試更加出色!

    LoadRunner參數(shù)化最佳實(shí)踐:讓你的性能測試更加出色!

    距離上次使用loadrunnr 已經(jīng)有一年多的時(shí)間了。初做測試時(shí)在項(xiàng)目中用過,后面項(xiàng)目中用不到,自己把重點(diǎn)放在了工具之外的東西上,認(rèn)為性能測試不僅僅是會(huì)用工具,最近又想有一把好的利器畢竟可以幫助自己更好的完成性能測試工作。這算是一個(gè)認(rèn)知的過程吧! 在次安裝

    2023年04月25日
    瀏覽(25)
  • Windows 10計(jì)算機(jī)性能優(yōu)化:讓你的電腦更流暢

    Windows 10是目前最流行的操作系統(tǒng)之一,但在長期使用過程中,可能會(huì)出現(xiàn)一些性能方面的問題。本文將為你介紹如何選擇合適的Windows 10版本,并提供一些優(yōu)化技巧,使你的電腦性能更加流暢。此外,還將特別關(guān)注游戲用戶和工科工作流,提供相應(yīng)的優(yōu)化方向。讓我們開始吧

    2024年02月10日
    瀏覽(28)
  • 15分鐘搭建無門檻服務(wù)器性能監(jiān)控系統(tǒng),讓你的服務(wù)器運(yùn)行如飛!

    15分鐘搭建無門檻服務(wù)器性能監(jiān)控系統(tǒng),讓你的服務(wù)器運(yùn)行如飛!

    服務(wù)器監(jiān)控是每個(gè)互聯(lián)網(wǎng)廠商都重視并且想要盡可能做好的事情,從數(shù)據(jù)收集、數(shù)據(jù)處理、數(shù)據(jù)可視化最終再到實(shí)時(shí)監(jiān)控告警,這一系列復(fù)雜的流程可能耗費(fèi)企業(yè)大量的人力和時(shí)間,以至于某些時(shí)候因?yàn)槠鋸?fù)雜性高無法達(dá)到預(yù)期的監(jiān)控效果。而當(dāng)事故發(fā)生時(shí)才發(fā)現(xiàn),由于監(jiān)控

    2024年01月22日
    瀏覽(26)
  • 好的代碼風(fēng)格,如同書法,讓你的代碼更加漂亮

    好的代碼風(fēng)格,如同書法,讓你的代碼更加漂亮

    很多初學(xué)者的代碼其實(shí)都不夠“漂亮”,那是因?yàn)闆]有養(yǎng)成好的編碼習(xí)慣。本篇博客以C語言為例,總結(jié)一些好習(xí)慣。其實(shí),很多習(xí)慣都是肌肉記憶,舉個(gè)例子:請你寫一個(gè)程序,輸入2個(gè)整數(shù)并輸出它們的和。有些朋友可能寫出來是這個(gè)樣子。 我寫這段代碼,是在模仿有些朋

    2024年02月01日
    瀏覽(18)
  • 算法——讓你的代碼更具有可讀性

    今天其實(shí)算一個(gè)小專欄(內(nèi)容參考《代碼大全2》)明天開始更新具體的算法,這些算法我都會(huì)從力扣上找,語言的話暫時(shí)是c和c++還有c#的寫法(不要過于專注于編程語言,語言只是工具,關(guān)鍵在于學(xué)習(xí)思維) 我們創(chuàng)建子程序的目的,就是讓主函數(shù)盡量簡潔,復(fù)雜的部分放到

    2024年01月20日
    瀏覽(24)
  • 學(xué)會(huì) CompletableFuture:讓你的代碼免受阻塞之苦!

    學(xué)會(huì) CompletableFuture:讓你的代碼免受阻塞之苦!

    來源:https://juejin.cn/post/6844904024332828685 通過閱讀本篇文章你將了解到: CompletableFuture的使用 CompletableFure異步和同步的性能測試 已經(jīng)有了Future為什么仍需要在JDK1.8中引入CompletableFuture CompletableFuture的應(yīng)用場景 對(duì)CompletableFuture的使用優(yōu)化 查詢所有商店某個(gè)商品的價(jià)格并返回,并

    2024年02月08日
    瀏覽(26)
  • 9 個(gè)讓你的 Python 代碼更快的小技巧

    哈嘍大家好,我是咸魚 我們經(jīng)常聽到 “Python 太慢了”,“Python 性能不行”這樣的觀點(diǎn)。但是,只要掌握一些編程技巧,就能大幅提升 Python 的運(yùn)行速度。 今天就讓我們一起來看下讓 Python 性能更高的 9 個(gè)小技巧 原文鏈接: https://medium.com/techtofreedom/9-fabulous-python-tricks-that-m

    2024年02月03日
    瀏覽(21)
  • “讓你的代碼修改更高效:PyCharm全局修改教程“

    “讓你的代碼修改更高效:PyCharm全局修改教程” PyCharm是一款功能強(qiáng)大的Python IDE,它可以幫助Python開發(fā)者提高代碼的質(zhì)量和效率。PyCharm中的全局修改是一個(gè)非常有用的功能,它可以幫助你快速地對(duì)你的代碼進(jìn)行大規(guī)模的修改。在這篇文章中,我們將介紹如何使用PyCharm的全局

    2024年02月07日
    瀏覽(38)
  • 掌握python的dataclass,讓你的代碼更簡潔優(yōu)雅

    dataclass 是從 Python3.7 版本開始,作為標(biāo)準(zhǔn)庫中的模塊被引入。 隨著 Python 版本的不斷更新, dataclass 也逐步發(fā)展和完善,為 Python 開發(fā)者提供了更加便捷的數(shù)據(jù)類創(chuàng)建和管理方式。 dataclass 的主要功能在于幫助我們簡化數(shù)據(jù)類的定義過程。 本文總結(jié)了幾個(gè)我平時(shí)使用較多 data

    2024年03月16日
    瀏覽(24)
  • 想讓你的代碼簡潔,試試這個(gè)SimpleDateFormat類高深用法

    想讓你的代碼簡潔,試試這個(gè)SimpleDateFormat類高深用法

    本文分享自華為云社區(qū)《從入門到精通:SimpleDateFormat類高深用法,讓你的代碼更簡潔!》,作者:bug菌。 @[toc] 日期時(shí)間在開發(fā)中是非常常見的需求,尤其是在處理與時(shí)間相關(guān)的業(yè)務(wù)邏輯時(shí),我們需要對(duì)日期時(shí)間進(jìn)行格式化、比較等操作。在Java中,我們可以使用 SimpleDateFor

    2024年02月08日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包