
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ù)分析變得更加高效。
import numpy as np import pandas as pd
我們有時(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')
當(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
示例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
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ù)。
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)是,pandas 和 numpy的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)
在處理數(shù)據(jù)幀時(shí),我們經(jīng)常使用過(guò)濾或選擇方法。Isin是一種先進(jìn)的篩選方法。例如,我們可以根據(jù)選擇列表篩選數(shù)據(jù)。
years = ['2010','2014','2017'] df[df.year.isin(years)]
Loc 和 iloc 函數(shù)用于選擇行或者列。
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']]
此函數(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()
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
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)指定新的列名。
假設(shè)數(shù)據(jù)集在一個(gè)觀測(cè)(行)中包含一個(gè)要素的多個(gè)條目,但您希望在單獨(dú)的行中分析它們。
我們想在不同的行上看到“c”的測(cè)量值,這很容易用explode來(lái)完成。
df1.explode('measurement').reset_index(drop=True) df
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ù)目。
'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
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í)作用巨大。
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
describe函數(shù)計(jì)算數(shù)字列的基本統(tǒng)計(jì)信息,這些列包括計(jì)數(shù)、平均值、標(biāo)準(zhǔn)偏差、最小值和最大值、中值、第一個(gè)和第三個(gè)四分位數(shù)。因此,它提供了dataframe的統(tǒng)計(jì)摘要。
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”等。
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')
顧名思義,它允許替換dataframe中的值。第一個(gè)參數(shù)是要替換的值,第二個(gè)參數(shù)是新值。
df.replace('A', 'A_1')
我們也可以在同一個(gè)字典中多次替換。
df.replace({'A':'A_1', 'B':'B_1'})
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
LSTM 模型輸入長(zhǎng)度選擇技巧:提升序列建模效能的關(guān)鍵? 在循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)家族中,長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)憑借其解決長(zhǎng)序列 ...
2025-07-11CDA 數(shù)據(jù)分析師報(bào)考條件詳解與準(zhǔn)備指南? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代浪潮下,CDA 數(shù)據(jù)分析師認(rèn)證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據(jù)透視表中兩列相乘合計(jì)的實(shí)用指南? 在數(shù)據(jù)分析的日常工作中,數(shù)據(jù)透視表憑借其強(qiáng)大的數(shù)據(jù)匯總和分析功能,成為了 Excel 用戶 ...
2025-07-11尊敬的考生: 您好! 我們誠(chéng)摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實(shí)施重大更新。 此次更新旨在確保認(rèn) ...
2025-07-10BI 大數(shù)據(jù)分析師:連接數(shù)據(jù)與業(yè)務(wù)的價(jià)值轉(zhuǎn)化者? ? 在大數(shù)據(jù)與商業(yè)智能(Business Intelligence,簡(jiǎn)稱(chēng) BI)深度融合的時(shí)代,BI ...
2025-07-10SQL 在預(yù)測(cè)分析中的應(yīng)用:從數(shù)據(jù)查詢(xún)到趨勢(shì)預(yù)判? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代,預(yù)測(cè)分析作為挖掘數(shù)據(jù)潛在價(jià)值的核心手段,正被廣泛 ...
2025-07-10數(shù)據(jù)查詢(xún)結(jié)束后:分析師的收尾工作與價(jià)值深化? ? 在數(shù)據(jù)分析的全流程中,“query end”(查詢(xún)結(jié)束)并非工作的終點(diǎn),而是將數(shù) ...
2025-07-10CDA 數(shù)據(jù)分析師考試:從報(bào)考到取證的全攻略? 在數(shù)字經(jīng)濟(jì)蓬勃發(fā)展的今天,數(shù)據(jù)分析師已成為各行業(yè)爭(zhēng)搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢(shì)性檢驗(yàn):捕捉數(shù)據(jù)背后的時(shí)間軌跡? 在數(shù)據(jù)分析的版圖中,單樣本趨勢(shì)性檢驗(yàn)如同一位耐心的偵探,專(zhuān)注于從單 ...
2025-07-09year_month數(shù)據(jù)類(lèi)型:時(shí)間維度的精準(zhǔn)切片? ? 在數(shù)據(jù)的世界里,時(shí)間是最不可或缺的維度之一,而year_month數(shù)據(jù)類(lèi)型就像一把精準(zhǔn) ...
2025-07-09CDA 備考干貨:Python 在數(shù)據(jù)分析中的核心應(yīng)用與實(shí)戰(zhàn)技巧? ? 在 CDA 數(shù)據(jù)分析師認(rèn)證考試中,Python 作為數(shù)據(jù)處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗(yàn):數(shù)據(jù)趨勢(shì)與突變分析的有力工具? ? ? 在數(shù)據(jù)分析的廣袤領(lǐng)域中,準(zhǔn)確捕捉數(shù)據(jù)的趨勢(shì)變化以及識(shí)別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據(jù)分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據(jù)分析師認(rèn)證作為國(guó)內(nèi)權(quán)威的數(shù)據(jù)分析能力認(rèn)證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應(yīng)對(duì)策略? 長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)作為循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的一種變體,憑借獨(dú)特的門(mén)控機(jī)制,在 ...
2025-07-07統(tǒng)計(jì)學(xué)方法在市場(chǎng)調(diào)研數(shù)據(jù)中的深度應(yīng)用? 市場(chǎng)調(diào)研是企業(yè)洞察市場(chǎng)動(dòng)態(tài)、了解消費(fèi)者需求的重要途徑,而統(tǒng)計(jì)學(xué)方法則是市場(chǎng)調(diào)研數(shù) ...
2025-07-07CDA數(shù)據(jù)分析師證書(shū)考試全攻略? 在數(shù)字化浪潮席卷全球的當(dāng)下,數(shù)據(jù)已成為企業(yè)決策、行業(yè)發(fā)展的核心驅(qū)動(dòng)力,數(shù)據(jù)分析師也因此成為 ...
2025-07-07剖析 CDA 數(shù)據(jù)分析師考試題型:解鎖高效備考與答題策略? CDA(Certified Data Analyst)數(shù)據(jù)分析師考試作為衡量數(shù)據(jù)專(zhuān)業(yè)能力的 ...
2025-07-04SQL Server 字符串截取轉(zhuǎn)日期:解鎖數(shù)據(jù)處理的關(guān)鍵技能? 在數(shù)據(jù)處理與分析工作中,數(shù)據(jù)格式的規(guī)范性是保證后續(xù)分析準(zhǔn)確性的基礎(chǔ) ...
2025-07-04CDA 數(shù)據(jù)分析師視角:從數(shù)據(jù)迷霧中探尋商業(yè)真相? 在數(shù)字化浪潮席卷全球的今天,數(shù)據(jù)已成為企業(yè)決策的核心驅(qū)動(dòng)力,CDA(Certifie ...
2025-07-04CDA 數(shù)據(jù)分析師:開(kāi)啟數(shù)據(jù)職業(yè)發(fā)展新征程? ? 在數(shù)據(jù)成為核心生產(chǎn)要素的今天,數(shù)據(jù)分析師的職業(yè)價(jià)值愈發(fā)凸顯。CDA(Certified D ...
2025-07-03