自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

效率驚人!三大相見恨晚的Pandas函數(shù)

大數(shù)據(jù)
在Pandas中,一些函數(shù)意義純粹,但也有一些函數(shù)指的是使用Pandas的方式,以及為什么一種方法比另一種更好。這兒有一些節(jié)省大量的時間和精力Pandas函數(shù)和使用方法,這些效率驚人的神器千萬不要錯過。

本文轉(zhuǎn)載自公眾號“讀芯術(shù)”(ID:AI_Discovery)

數(shù)據(jù)科學(xué)領(lǐng)域如此之廣,鮮少有人能精通所有語言、數(shù)據(jù)庫,筆者盡管已經(jīng)從事了該行業(yè)數(shù)年之久,但仍然所知不多。學(xué)無止境,變得優(yōu)秀的方法就是不停下學(xué)習(xí)的腳步。

在Pandas中,一些函數(shù)意義純粹,但也有一些函數(shù)指的是使用Pandas的方式,以及為什么一種方法比另一種更好。這兒有一些節(jié)省大量的時間和精力Pandas函數(shù)和使用方法,這些效率驚人的神器千萬不要錯過。

[[324737]]

itertuples()

確實(shí),它并不是純粹的函數(shù),而是指使用Pandas的更有效方法,是循環(huán)訪問數(shù)據(jù)集的快捷方法。在花時間理解注釋部分之前,可以用更有效的方法計算總列值,在此筆者僅提出一些要點(diǎn)。

下面是一列簡單數(shù)據(jù)集,數(shù)字范圍為1到1百萬。

  1. df =pd.DataFrame(data={ 
  2.    'Number': range(1, 1000000) 
  3. }) 

這是前幾行的示例:

效率驚人!三大相見恨晚的Pandas函數(shù)

現(xiàn)在列舉一個錯誤的方式。輸入一個總計變量并將其設(shè)置為0. 然后,通過使用iterrows()循環(huán)訪問數(shù)據(jù)集,并在total的基礎(chǔ)上增加當(dāng)前行的值,與此同時統(tǒng)計操作時間。以下是代碼:

  1. %%timetotal0for _, row in df.iterrows(): 
  2.     total += row['Number'] 
  3.   
  4. total>>> Wall time: 18.7 s 

這項(xiàng)小小的操作歷時將近19秒,而現(xiàn)在有一個更快捷的方法,與上述操作大致相同,但要加iteruples 而不是 iterrows:

  1. %%timetotal0for row in df.itertuples(index=False): 
  2.     total += row.Number 
  3.   
  4. total>>> Wall time: 82.1 ms 

筆者沒有計算時間,但可以看到操作速度提高非常明顯。下次執(zhí)行循環(huán)時請記住這一點(diǎn)。

nlargest()和nsmallest()

筆者計算了兩個緯度/經(jīng)度對之間的距離(以公里為單位)。那是第一步操作,第二步是選擇距離最小的前N條記錄。

輸入-nsmallest()。nlargest()將返回N個最大值,而nsmallest()將恰好相反。

看看它的實(shí)際結(jié)果。在實(shí)際操作中,筆者準(zhǔn)備了一個小的數(shù)據(jù)集:

  1. df =pd.DataFrame(data={ 
  2.     'Name': ['Bob', 'Mark', 'Josh','Anna', 'Peter', 'Dexter'], 
  3.     'Points': [37, 91, 66, 42, 99, 81] 
  4. }) 

結(jié)果如下:

效率驚人!三大相見恨晚的Pandas函數(shù)

現(xiàn)在該數(shù)據(jù)集不是僅僅6行,而是包含了6000行,為了找到表現(xiàn)最好的學(xué)生,即分?jǐn)?shù)最高,一種方法是這樣的:

  1. df['Points'].nlargest(3) 

但這不是最佳解決方案,它會導(dǎo)致以下結(jié)果,沒有清楚顯示真實(shí)姓名:

改善方法如下:

  1. df.nlargest(3,columns='Points'

怎么樣,是不是看起來更棒了:

效率驚人!三大相見恨晚的Pandas函數(shù)

以幾乎相同的操作來找到3個表現(xiàn)最差的學(xué)生-使用nsmallest()功能:

  1. df.nsmallest(3,columns='Points'

輸出結(jié)果如下:

效率驚人!三大相見恨晚的Pandas函數(shù)

cut()

這一部分將繼續(xù)使用上一部分中的數(shù)據(jù)集,來回顧一下:

  1. df =pd.DataFrame(data={ 
  2.     'Name': ['Bob', 'Mark', 'Josh','Anna', 'Peter', 'Dexter'], 
  3.     'Points': [37, 91, 66, 42, 99, 81] 
  4. }) 

效率驚人!三大相見恨晚的Pandas函數(shù)

cut()函數(shù)的基本原理是將值分為不同的區(qū)間。下面是最簡單的示例,將從Points屬性創(chuàng)建兩個容器:

  1. pd.cut(df['Points'],bins=2

效率驚人!三大相見恨晚的Pandas函數(shù)

現(xiàn)在還看不出效果。但是如何輸入從0到50的區(qū)間,以及第二個從50到100的區(qū)間呢?聽起來有點(diǎn)麻煩。以下為代碼:

  1. pd.cut(df['Points'],bins=[0, 50, 100]) 

效率驚人!三大相見恨晚的Pandas函數(shù)

但是需要注意的是,您要顯示的是Fail而不是(0,50],要顯示Pass而不是(50,100]。你需要這樣做:

  1. pd.cut(df['Points'],bins=[0, 50, 100], labels=['Fail', 'Pass']) 

效率驚人!三大相見恨晚的Pandas函數(shù)

對于剛?cè)腴T的程序員,這些功能將有助于節(jié)省時間和精力;如果你是資深程序員,本文或許能幫你加強(qiáng)對這些函數(shù)的了解,避免每次都得從頭開始捋,因?yàn)檫@樣毫無意義。

 

責(zé)任編輯:趙寧寧 來源: 讀芯術(shù)
相關(guān)推薦

2021-04-14 09:22:18

Python技巧交換變量值

2020-04-01 14:16:05

Pandastips數(shù)據(jù)分析

2021-09-28 14:40:03

Python內(nèi)置庫itertools

2024-01-29 00:51:39

前端開發(fā)利器

2017-06-01 09:34:55

R語言包sqldf

2021-08-19 15:02:32

科技軟件電腦

2018-01-25 14:53:20

iPhone技巧刪除照片

2019-08-09 14:13:22

Python知乎程序員

2025-03-24 01:00:00

2015-10-27 10:12:21

r語言命令相見恨晚

2020-05-07 09:02:55

代碼Python開發(fā)

2016-12-09 12:50:36

Android

2015-07-14 14:09:56

2009-02-20 13:12:23

unixSolaris初學(xué)者

2024-08-22 08:57:32

Python技巧參數(shù)

2021-08-20 15:43:54

iPhone手機(jī)iOS

2019-02-12 11:22:29

Linux 系統(tǒng) 命令

2023-08-02 20:04:47

2018-02-07 14:54:17

Riverbed應(yīng)用性能管理數(shù)字體驗(yàn)

2020-03-19 10:12:10

開發(fā)技能代碼
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號