
pandas 是為了解決數(shù)據(jù)分析任務(wù)而創(chuàng)建的一種工具。pandas提供了大量能使我們快速便捷地處理數(shù)據(jù)的函數(shù)和方法,它是使Python成為強(qiáng)大而高效的數(shù)據(jù)分析環(huán)境的重要因素之一。今天小編就給大家分享一篇關(guān)于常見pandas函數(shù)的文章,希望對(duì)大家有所幫助。
文章來源: DeepHub IMBA
作者:P**nHub兄弟網(wǎng)站
pandas是一個(gè)受眾廣泛的python數(shù)據(jù)分析庫。它提供了許多函數(shù)和方法來加快數(shù)據(jù)分析過程。pandas之所以如此普遍,是因?yàn)樗墓δ軓?qiáng)大、靈活簡單。本文將介紹20個(gè)常用的 Pandas 函數(shù)以及具體的示例代碼,助力你的數(shù)據(jù)分析變得更加高效。
import numpy as np import pandas as pd
我們有時(shí)需要根據(jù)條件篩選數(shù)據(jù),一個(gè)簡單方法是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ù)的語法十分簡單:
df.query('value_1 < value_2')
當(dāng)我們想要在 dataframe 里增加一列數(shù)據(jù)時(shí),默認(rèn)添加在最后。當(dāng)我們需要添加在任意位置,則可以使用 insert 函數(shù)。使用該函數(shù)只需要指定插入的位置、列名稱、插入的對(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ù)來計(jì)算加和,即cumsum。
如果我們只是簡單使用cumsum函數(shù),(A,B,C)組別將被忽略。這樣得到的累積值在某些情況下意義不大,因?yàn)槲覀兏枰煌〗M的累計(jì)數(shù)據(jù)。對(duì)于這個(gè)問題有一個(gè)非常簡單方便的解決方案,我們可以同時(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
上述代碼中,我們通過指定采樣數(shù)量 n 來進(jìn)行隨機(jī)選取。此外,也可以通過指定采樣比例 frac 來隨機(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é)果,但語法存在差異。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)常使用過濾或選擇方法。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開始向上的整數(shù)。與iloc一起使用的行位置也是從0開始的整數(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è)量值。我們可以通過使用'melt'函數(shù)輕松實(shí)現(xiàn):
df_wide.melt(id_vars=['city']) df
變量名和列名通常默認(rèn)給出。我們也可以使用melt函數(shù)的var_name和value_name參數(shù)來指定新的列名。
假設(shè)數(shù)據(jù)集在一個(gè)觀測(cè)(行)中包含一個(gè)要素的多個(gè)條目,但您希望在單獨(dú)的行中分析它們。
我們想在不同的行上看到“c”的測(cè)量值,這很容易用explode來完成。
df1.explode('measurement').reset_index(drop=True) df
Nunique統(tǒng)計(jì)列或行上的唯一條目數(shù)。它在分類特征中非常有用,特別是在我們事先不知道類別數(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ù)類型,其中之一就是object。object包含文本或混合(數(shù)字和非數(shù)字)值。但是,如果有其他選項(xiàng)可用,則不建議使用對(duì)象數(shù)據(jù)類型。使用更具體的數(shù)據(jù)類型,某些操作執(zhí)行得更快。例如,對(duì)于數(shù)值,我們更喜歡使用整數(shù)或浮點(diǎn)數(shù)據(jù)類型。
infer_objects嘗試為對(duì)象列推斷更好的數(shù)據(jù)類型??紤]以下數(shù)據(jù):
df2.dtypes A object B object C object D object dtype: object
通過上述代碼可知,現(xiàn)有所有的數(shù)據(jù)類型默認(rèn)都是object。讓我們看看推斷的數(shù)據(jù)類型是什么:
df2.infer_objects().dtypes A int64 B float64 C bool D object dtype: object
'infer_obejects'可能看起來微不足道,但在有很多列時(shí)作用巨大。
Memory_usage()返回每列使用的內(nèi)存量(以字節(jié)為單位)??紤]下面的數(shù)據(jù),其中每一列有一百萬行。
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ù)類型設(shè)置的條件返回dataframe的子集。它允許使用include和exlude參數(shù)包含或排除某些數(shù)據(jù)類型。
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ù)。在這種情況下,簡單的矢量化操作(例如df*4)要快得多。
然而,在某些情況下,我們可能無法選擇矢量化操作。例如,我們可以使用pandas dataframes的style屬性更改dataframe的樣式。以下代碼將負(fù)值的顏色設(shè)置為紅色:
def color_negative_values(val): color = 'red' if val < 0 else 'black' return 'color: %s' % color
通過Applymap將上述代碼應(yīng)用到dataframe:
df3.style.applymap(color_negative_values)
作者:Soner Y?ld?r?m
deephub翻譯組:Oliver Lee
數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼
若不方便掃碼,搜微信號(hào):CDAshujufenxi
SQL Server 中 CONVERT 函數(shù)的日期轉(zhuǎn)換:從基礎(chǔ)用法到實(shí)戰(zhàn)優(yōu)化 在 SQL Server 的數(shù)據(jù)處理中,日期格式轉(zhuǎn)換是高頻需求 —— 無論 ...
2025-09-18MySQL 大表拆分與關(guān)聯(lián)查詢效率:打破 “拆分必慢” 的認(rèn)知誤區(qū) 在 MySQL 數(shù)據(jù)庫管理中,“大表” 始終是性能優(yōu)化繞不開的話題。 ...
2025-09-18CDA 數(shù)據(jù)分析師:表結(jié)構(gòu)數(shù)據(jù) “獲取 - 加工 - 使用” 全流程的賦能者 表結(jié)構(gòu)數(shù)據(jù)(如數(shù)據(jù)庫表、Excel 表、CSV 文件)是企業(yè)數(shù)字 ...
2025-09-18DSGE 模型中的 Et:理性預(yù)期算子的內(nèi)涵、作用與應(yīng)用解析 動(dòng)態(tài)隨機(jī)一般均衡(Dynamic Stochastic General Equilibrium, DSGE)模 ...
2025-09-17Python 提取 TIF 中地名的完整指南 一、先明確:TIF 中的地名有哪兩種存在形式? 在開始提取前,需先判斷 TIF 文件的類型 —— ...
2025-09-17CDA 數(shù)據(jù)分析師:解鎖表結(jié)構(gòu)數(shù)據(jù)特征價(jià)值的專業(yè)核心 表結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 規(guī)范存儲(chǔ)的結(jié)構(gòu)化數(shù)據(jù),如數(shù)據(jù)庫表、Excel 表、 ...
2025-09-17Excel 導(dǎo)入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實(shí)戰(zhàn)應(yīng)用 在用 Python(如 pandas 庫)處理 Excel 數(shù)據(jù)時(shí),“缺失值” 是高頻 ...
2025-09-16深入解析卡方檢驗(yàn)與 t 檢驗(yàn):差異、適用場(chǎng)景與實(shí)踐應(yīng)用 在數(shù)據(jù)分析與統(tǒng)計(jì)學(xué)領(lǐng)域,假設(shè)檢驗(yàn)是驗(yàn)證研究假設(shè)、判斷數(shù)據(jù)差異是否 “ ...
2025-09-16CDA 數(shù)據(jù)分析師:掌控表格結(jié)構(gòu)數(shù)據(jù)全功能周期的專業(yè)操盤手 表格結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 存儲(chǔ)的結(jié)構(gòu)化數(shù)據(jù),如 Excel 表、數(shù)據(jù) ...
2025-09-16MySQL 執(zhí)行計(jì)劃中 rows 數(shù)量的準(zhǔn)確性解析:原理、影響因素與優(yōu)化 在 MySQL SQL 調(diào)優(yōu)中,EXPLAIN執(zhí)行計(jì)劃是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 對(duì)象的 text 與 content:區(qū)別、場(chǎng)景與實(shí)踐指南 在 Python 進(jìn)行 HTTP 網(wǎng)絡(luò)請(qǐng)求開發(fā)時(shí)(如使用requests ...
2025-09-15CDA 數(shù)據(jù)分析師:激活表格結(jié)構(gòu)數(shù)據(jù)價(jià)值的核心操盤手 表格結(jié)構(gòu)數(shù)據(jù)(如 Excel 表格、數(shù)據(jù)庫表)是企業(yè)最基礎(chǔ)、最核心的數(shù)據(jù)形態(tài) ...
2025-09-15Python HTTP 請(qǐng)求工具對(duì)比:urllib.request 與 requests 的核心差異與選擇指南 在 Python 處理 HTTP 請(qǐng)求(如接口調(diào)用、數(shù)據(jù)爬取 ...
2025-09-12解決 pd.read_csv 讀取長浮點(diǎn)數(shù)據(jù)的科學(xué)計(jì)數(shù)法問題 為幫助 Python 數(shù)據(jù)從業(yè)者解決pd.read_csv讀取長浮點(diǎn)數(shù)據(jù)時(shí)的科學(xué)計(jì)數(shù)法問題 ...
2025-09-12CDA 數(shù)據(jù)分析師:業(yè)務(wù)數(shù)據(jù)分析步驟的落地者與價(jià)值優(yōu)化者 業(yè)務(wù)數(shù)據(jù)分析是企業(yè)解決日常運(yùn)營問題、提升執(zhí)行效率的核心手段,其價(jià)值 ...
2025-09-12用 SQL 驗(yàn)證業(yè)務(wù)邏輯:從規(guī)則拆解到數(shù)據(jù)把關(guān)的實(shí)戰(zhàn)指南 在業(yè)務(wù)系統(tǒng)落地過程中,“業(yè)務(wù)邏輯” 是連接 “需求設(shè)計(jì)” 與 “用戶體驗(yàn) ...
2025-09-11塔吉特百貨孕婦營銷案例:數(shù)據(jù)驅(qū)動(dòng)下的精準(zhǔn)零售革命與啟示 在零售行業(yè) “流量紅利見頂” 的當(dāng)下,精準(zhǔn)營銷成為企業(yè)突圍的核心方 ...
2025-09-11CDA 數(shù)據(jù)分析師與戰(zhàn)略 / 業(yè)務(wù)數(shù)據(jù)分析:概念辨析與協(xié)同價(jià)值 在數(shù)據(jù)驅(qū)動(dòng)決策的體系中,“戰(zhàn)略數(shù)據(jù)分析”“業(yè)務(wù)數(shù)據(jù)分析” 是企業(yè) ...
2025-09-11Excel 數(shù)據(jù)聚類分析:從操作實(shí)踐到業(yè)務(wù)價(jià)值挖掘 在數(shù)據(jù)分析場(chǎng)景中,聚類分析作為 “無監(jiān)督分組” 的核心工具,能從雜亂數(shù)據(jù)中挖 ...
2025-09-10統(tǒng)計(jì)模型的核心目的:從數(shù)據(jù)解讀到?jīng)Q策支撐的價(jià)值導(dǎo)向 統(tǒng)計(jì)模型作為數(shù)據(jù)分析的核心工具,并非簡單的 “公式堆砌”,而是圍繞特定 ...
2025-09-10