99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁(yè)大數(shù)據(jù)時(shí)代20個(gè)能夠有效提高 pandas數(shù)據(jù)分析效率的常用函數(shù),附帶解釋和例子
20個(gè)能夠有效提高 pandas數(shù)據(jù)分析效率的常用函數(shù),附帶解釋和例子
2020-08-07
收藏

pandas 是為了解決數(shù)據(jù)分析任務(wù)而創(chuàng)建的一種工具。pandas提供了大量能使我們快速便捷地處理數(shù)據(jù)的函數(shù)和方法,它是使Python成為強(qiáng)大而高效的數(shù)據(jù)分析環(huán)境的重要因素之一。今天小編就給大家分享一篇關(guān)于常見(jiàn)pandas函數(shù)的文章,希望對(duì)大家有所幫助。

文章來(lái)源: DeepHub IMBA

作者:P**nHub兄弟網(wǎng)站

pandas是一個(gè)受眾廣泛的python數(shù)據(jù)分析庫(kù)。它提供了許多函數(shù)和方法來(lái)加快數(shù)據(jù)分析過(guò)程。pandas之所以如此普遍,是因?yàn)樗墓δ軓?qiáng)大、靈活簡(jiǎn)單。本文將介紹20個(gè)常用的 Pandas 函數(shù)以及具體的示例代碼,助力你的數(shù)據(jù)分析變得更加高效。

首先,我們導(dǎo)入 numpypandas包。

 import numpy as np
 import pandas as pd

1. Query

我們有時(shí)需要根據(jù)條件篩選數(shù)據(jù),一個(gè)簡(jiǎn)單方法是query函數(shù)。為了更直觀理解這個(gè)函數(shù),我們首先創(chuàng)建一個(gè)示例 dataframe。

 values_1 = np.random.randint(10, size=10)
 values_2 = np.random.randint(10, size=10)
 years = np.arange(2010,2020)
 groups = ['A','A','B','A','B','B','C','A','C','C']
 df = pd.DataFrame({'group':groups, 'year':years, 'value_1':values_1,'value_2':values_2})
 df

使用query函數(shù)的語(yǔ)法十分簡(jiǎn)單:

 df.query('value_1 < value_2')

2. Insert

當(dāng)我們想要在 dataframe 里增加一列數(shù)據(jù)時(shí),默認(rèn)添加在最后。當(dāng)我們需要添加在任意位置,則可以使用 insert 函數(shù)。使用該函數(shù)只需要指定插入的位置、列名稱(chēng)、插入的對(duì)象數(shù)據(jù)。

 # new column
 new_col = np.random.randn(10)
 # insert the new column at position 2
 df.insert(2, 'new_col', new_col)
 
 df

3. Cumsum

示例dataframe 包含3個(gè)小組的年度數(shù)據(jù)。我們可能只對(duì)年度數(shù)據(jù)感興趣,但在某些情況下,我們同樣還需要一個(gè)累計(jì)數(shù)據(jù)。Pandas提供了一個(gè)易于使用的函數(shù)來(lái)計(jì)算加和,即cumsum。

如果我們只是簡(jiǎn)單使用cumsum函數(shù),(A,B,C)組別將被忽略。這樣得到的累積值在某些情況下意義不大,因?yàn)槲覀兏枰煌〗M的累計(jì)數(shù)據(jù)。對(duì)于這個(gè)問(wèn)題有一個(gè)非常簡(jiǎn)單方便的解決方案,我們可以同時(shí)應(yīng)用groupby和cumsum函數(shù)。

 df['cumsum_2'] = df[['value_2','group'].groupby('group').cumsum()]
 
 df

4. Sample

Sample方法允許我們從DataFrame中隨機(jī)選擇數(shù)據(jù)。當(dāng)我們想從一個(gè)分布中選擇一個(gè)隨機(jī)樣本時(shí),這個(gè)函數(shù)很有用。

 sample1 = df.sample(n=3)
 sample1

上述代碼中,我們通過(guò)指定采樣數(shù)量 n 來(lái)進(jìn)行隨機(jī)選取。此外,也可以通過(guò)指定采樣比例 frac 來(lái)隨機(jī)選取數(shù)據(jù)。當(dāng) frac=0.5時(shí),將隨機(jī)返回一般的數(shù)據(jù)。

 sample2 = df.sample(frac=0.5)
 sample2

為了獲得可重復(fù)的樣品,我們可以指定random_state參數(shù)。如果將整數(shù)值傳遞給random_state,則每次運(yùn)行代碼時(shí)都將生成相同的采樣數(shù)據(jù)。

5. Where

where函數(shù)用于指定條件的數(shù)據(jù)替換。如果不指定條件,則默認(rèn)替換值為 NaN。

 df['new_col'].where(df['new_col'] > 0, 0)

where函數(shù)首先根據(jù)指定條件定位目標(biāo)數(shù)據(jù),然后替換為指定的新數(shù)據(jù)。上述代碼中,where(df['new_col']>0,0)指定'new_col'列中數(shù)值大于0的所有數(shù)據(jù)為被替換對(duì)象,并且被替換為0。

重要的一點(diǎn)是,pandasnumpy的where函數(shù)并不完全相同。我們可以得到相同的結(jié)果,但語(yǔ)法存在差異。Np.where還需要指定列對(duì)象。以下兩行返回相同的結(jié)果:

 df['new_col'].where(df['new_col'] > 0, 0)
 
 np.where(df['new_col'] > 0, df['new_col'], 0)

6. Isin

在處理數(shù)據(jù)幀時(shí),我們經(jīng)常使用過(guò)濾或選擇方法。Isin是一種先進(jìn)的篩選方法。例如,我們可以根據(jù)選擇列表篩選數(shù)據(jù)。

 years = ['2010','2014','2017']
 df[df.year.isin(years)]

7. Loc 和 iloc

Loc 和 iloc 函數(shù)用于選擇行或者列。

  • loc:通過(guò)標(biāo)簽選擇
  • iloc:通過(guò)位置選擇

loc用于按標(biāo)簽選擇數(shù)據(jù)。列的標(biāo)簽是列名。對(duì)于行標(biāo)簽,如果我們不分配任何特定的索引,pandas默認(rèn)創(chuàng)建整數(shù)索引。因此,行標(biāo)簽是從0開(kāi)始向上的整數(shù)。與iloc一起使用的行位置也是從0開(kāi)始的整數(shù)。

下述代碼實(shí)現(xiàn)選擇前三行前兩列的數(shù)據(jù)(iloc方式):

 df.iloc[:3,:2]

下述代碼實(shí)現(xiàn)選擇前三行前兩列的數(shù)據(jù)(loc方式):

 df.loc[:2,['group','year']]

注:當(dāng)使用loc時(shí),包括索引的上界,而使用iloc則不包括索引的上界。

下述代碼實(shí)現(xiàn)選擇"1","3","5"行、"year","value_1"列的數(shù)據(jù)(loc方式):

 df.loc[[1,3,5],['year','value_1']]

8. Pct_change

此函數(shù)用于計(jì)算一系列值的變化百分比。假設(shè)我們有一個(gè)包含[2,3,6]的序列。如果我們對(duì)這個(gè)序列應(yīng)用pct_change,則返回的序列將是[NaN,0.5,1.0]。從第一個(gè)元素到第二個(gè)元素增加了50%,從第二個(gè)元素到第三個(gè)元素增加了100%。Pct_change函數(shù)用于比較元素時(shí)間序列中的變化百分比。

 df.value_1.pct_change()

9. Rank

Rank函數(shù)實(shí)現(xiàn)對(duì)數(shù)據(jù)進(jìn)行排序。假設(shè)我們有一個(gè)包含[1,7,5,3]的序列。分配給這些值的等級(jí)為[1,4,3,2]。

 df['rank_1'] = df['value_1'].rank()
 df

10. Melt

Melt用于將維數(shù)較大的 dataframe轉(zhuǎn)換為維數(shù)較少的 dataframe。一些dataframe列中包含連續(xù)的度量或變量。在某些情況下,將這些列表示為行可能更適合我們的任務(wù)。考慮以下情況:

我們有三個(gè)不同的城市,在不同的日子進(jìn)行測(cè)量。我們決定將這些日子表示為列中的行。還將有一列顯示測(cè)量值。我們可以通過(guò)使用'melt'函數(shù)輕松實(shí)現(xiàn):

 df_wide.melt(id_vars=['city'])
 df

變量名和列名通常默認(rèn)給出。我們也可以使用melt函數(shù)的var_name和value_name參數(shù)來(lái)指定新的列名。

11. Explode

假設(shè)數(shù)據(jù)集在一個(gè)觀測(cè)(行)中包含一個(gè)要素的多個(gè)條目,但您希望在單獨(dú)的行中分析它們。

我們想在不同的行上看到“c”的測(cè)量值,這很容易用explode來(lái)完成。

 df1.explode('measurement').reset_index(drop=True)
 df

12. Nunique

Nunique統(tǒng)計(jì)列或行上的唯一條目數(shù)。它在分類(lèi)特征中非常有用,特別是在我們事先不知道類(lèi)別數(shù)量的情況下。讓我們看看我們的初始數(shù)據(jù):

 df.year.nunique()
 10
 df.group.nunique()
 3

我們可以直接將nunique函數(shù)應(yīng)用于dataframe,并查看每列中唯一值的數(shù)量:

如果axis參數(shù)設(shè)置為1,nunique將返回每行中唯一值的數(shù)目。

13. Lookup

'lookup'可以用于根據(jù)行、列的標(biāo)簽在dataframe中查找指定值。假設(shè)我們有以下數(shù)據(jù):

我們要?jiǎng)?chuàng)建一個(gè)新列,該列顯示“person”列中每個(gè)人的得分:

 df['Person_point'] = df.lookup(df.index, df['Person'])
 df

14. Infer_objects

Pandas支持廣泛的數(shù)據(jù)類(lèi)型,其中之一就是object。object包含文本或混合(數(shù)字和非數(shù)字)值。但是,如果有其他選項(xiàng)可用,則不建議使用對(duì)象數(shù)據(jù)類(lèi)型。使用更具體的數(shù)據(jù)類(lèi)型,某些操作執(zhí)行得更快。例如,對(duì)于數(shù)值,我們更喜歡使用整數(shù)或浮點(diǎn)數(shù)據(jù)類(lèi)型。

infer_objects嘗試為對(duì)象列推斷更好的數(shù)據(jù)類(lèi)型??紤]以下數(shù)據(jù):

 df2.dtypes
 A    object 
 B    object 
 C    object 
 D    object 
 dtype: object

通過(guò)上述代碼可知,現(xiàn)有所有的數(shù)據(jù)類(lèi)型默認(rèn)都是object。讓我們看看推斷的數(shù)據(jù)類(lèi)型是什么:

 df2.infer_objects().dtypes
 A      int64 
 B    float64 
 C       bool 
 D     object 
 dtype: object

'infer_obejects'可能看起來(lái)微不足道,但在有很多列時(shí)作用巨大。

15. Memory_usage

Memory_usage()返回每列使用的內(nèi)存量(以字節(jié)為單位)??紤]下面的數(shù)據(jù),其中每一列有一百萬(wàn)行。

 df_large = pd.DataFrame({'A': np.random.randn(1000000),
                     'B': np.random.randint(100, size=1000000)})
 df_large.shape
 (1000000, 2)

每列占用的內(nèi)存:

 df_large.memory_usage()
 Index        128 
 A        8000000 
 B        8000000 
 dtype: int64

整個(gè) dataframe 占用的內(nèi)存(轉(zhuǎn)換為以MB為單位):

 df_large.memory_usage().sum() / (1024**2) #converting to megabytes
 
 15.2589111328125

16. Describe

describe函數(shù)計(jì)算數(shù)字列的基本統(tǒng)計(jì)信息,這些列包括計(jì)數(shù)、平均值、標(biāo)準(zhǔn)偏差、最小值和最大值、中值、第一個(gè)和第三個(gè)四分位數(shù)。因此,它提供了dataframe的統(tǒng)計(jì)摘要。

17. Merge

Merge()根據(jù)共同列中的值組合dataframe??紤]以下兩個(gè)數(shù)據(jù):

我們可以基于列中的共同值合并它們。設(shè)置合并條件的參數(shù)是“on”參數(shù)。

df1和df2是基于column_a列中的共同值進(jìn)行合并的,merge函數(shù)的how參數(shù)允許以不同的方式組合dataframe,如:“inner”、“outer”、“l(fā)eft”、“right”等。

  • inner:僅在on參數(shù)指定的列中具有相同值的行(如果未指定其它方式,則默認(rèn)為 inner 方式)
  • outer:全部列數(shù)據(jù)
  • left:左一dataframe的所有列數(shù)據(jù)
  • right:右一dataframe的所有列數(shù)據(jù)

18. Select_dtypes

Select_dtypes函數(shù)根據(jù)對(duì)數(shù)據(jù)類(lèi)型設(shè)置的條件返回dataframe的子集。它允許使用include和exlude參數(shù)包含或排除某些數(shù)據(jù)類(lèi)型。

 df.select_dtypes(include='int64')
 df.select_dtypes(exclude='int64')

19. Replace

顧名思義,它允許替換dataframe中的值。第一個(gè)參數(shù)是要替換的值,第二個(gè)參數(shù)是新值。

 df.replace('A', 'A_1')

我們也可以在同一個(gè)字典中多次替換。

 df.replace({'A':'A_1', 'B':'B_1'})

20. Applymap

Applymap用于將一個(gè)函數(shù)應(yīng)用于dataframe中的所有元素。請(qǐng)注意,如果操作的矢量化版本可用,那么它應(yīng)該優(yōu)先于applymap。例如,如果我們想將每個(gè)元素乘以一個(gè)數(shù)字,我們不需要也不應(yīng)該使用applymap函數(shù)。在這種情況下,簡(jiǎn)單的矢量化操作(例如df*4)要快得多。

然而,在某些情況下,我們可能無(wú)法選擇矢量化操作。例如,我們可以使用pandas dataframes的style屬性更改dataframe的樣式。以下代碼將負(fù)值的顏色設(shè)置為紅色:

 def color_negative_values(val):
    color = 'red' if val < 0 else 'black'
    return 'color: %s' % color

通過(guò)Applymap將上述代碼應(yīng)用到dataframe:

 df3.style.applymap(color_negative_values)

作者:Soner Y?ld?r?m

deephub翻譯組:Oliver Lee

數(shù)據(jù)分析咨詢(xún)請(qǐng)掃描二維碼

若不方便掃碼,搜微信號(hào):CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢(xún)
客服在線
立即咨詢(xún)
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個(gè)參數(shù)驗(yàn)證碼對(duì)象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺(tái)檢測(cè)極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時(shí)表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說(shuō)明請(qǐng)參見(jiàn):http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時(shí)完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請(qǐng)輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請(qǐng)輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }