
pandas 是為了解決數(shù)據(jù)分析任務而創(chuàng)建的一種工具。pandas提供了大量能使我們快速便捷地處理數(shù)據(jù)的函數(shù)和方法,它是使Python成為強大而高效的數(shù)據(jù)分析環(huán)境的重要因素之一。今天小編就給大家分享一篇關于常見pandas函數(shù)的文章,希望對大家有所幫助。
文章來源: DeepHub IMBA
作者:P**nHub兄弟網(wǎng)站
pandas是一個受眾廣泛的python數(shù)據(jù)分析庫。它提供了許多函數(shù)和方法來加快數(shù)據(jù)分析過程。pandas之所以如此普遍,是因為它的功能強大、靈活簡單。本文將介紹20個常用的 Pandas 函數(shù)以及具體的示例代碼,助力你的數(shù)據(jù)分析變得更加高效。
import numpy as np import pandas as pd
我們有時需要根據(jù)條件篩選數(shù)據(jù),一個簡單方法是query函數(shù)。為了更直觀理解這個函數(shù),我們首先創(chuàng)建一個示例 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')
當我們想要在 dataframe 里增加一列數(shù)據(jù)時,默認添加在最后。當我們需要添加在任意位置,則可以使用 insert 函數(shù)。使用該函數(shù)只需要指定插入的位置、列名稱、插入的對象數(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個小組的年度數(shù)據(jù)。我們可能只對年度數(shù)據(jù)感興趣,但在某些情況下,我們同樣還需要一個累計數(shù)據(jù)。Pandas提供了一個易于使用的函數(shù)來計算加和,即cumsum。
如果我們只是簡單使用cumsum函數(shù),(A,B,C)組別將被忽略。這樣得到的累積值在某些情況下意義不大,因為我們更需要不同小組的累計數(shù)據(jù)。對于這個問題有一個非常簡單方便的解決方案,我們可以同時應用groupby和cumsum函數(shù)。
df['cumsum_2'] = df[['value_2','group'].groupby('group').cumsum()] df
Sample方法允許我們從DataFrame中隨機選擇數(shù)據(jù)。當我們想從一個分布中選擇一個隨機樣本時,這個函數(shù)很有用。
sample1 = df.sample(n=3) sample1
上述代碼中,我們通過指定采樣數(shù)量 n 來進行隨機選取。此外,也可以通過指定采樣比例 frac 來隨機選取數(shù)據(jù)。當 frac=0.5時,將隨機返回一般的數(shù)據(jù)。
sample2 = df.sample(frac=0.5) sample2
為了獲得可重復的樣品,我們可以指定random_state參數(shù)。如果將整數(shù)值傳遞給random_state,則每次運行代碼時都將生成相同的采樣數(shù)據(jù)。
where函數(shù)用于指定條件的數(shù)據(jù)替換。如果不指定條件,則默認替換值為 NaN。
df['new_col'].where(df['new_col'] > 0, 0)
where函數(shù)首先根據(jù)指定條件定位目標數(shù)據(jù),然后替換為指定的新數(shù)據(jù)。上述代碼中,where(df['new_col']>0,0)指定'new_col'列中數(shù)值大于0的所有數(shù)據(jù)為被替換對象,并且被替換為0。
重要的一點是,pandas 和 numpy的where函數(shù)并不完全相同。我們可以得到相同的結果,但語法存在差異。Np.where還需要指定列對象。以下兩行返回相同的結果:
df['new_col'].where(df['new_col'] > 0, 0) np.where(df['new_col'] > 0, df['new_col'], 0)
在處理數(shù)據(jù)幀時,我們經(jīng)常使用過濾或選擇方法。Isin是一種先進的篩選方法。例如,我們可以根據(jù)選擇列表篩選數(shù)據(jù)。
years = ['2010','2014','2017'] df[df.year.isin(years)]
Loc 和 iloc 函數(shù)用于選擇行或者列。
loc用于按標簽選擇數(shù)據(jù)。列的標簽是列名。對于行標簽,如果我們不分配任何特定的索引,pandas默認創(chuàng)建整數(shù)索引。因此,行標簽是從0開始向上的整數(shù)。與iloc一起使用的行位置也是從0開始的整數(shù)。
下述代碼實現(xiàn)選擇前三行前兩列的數(shù)據(jù)(iloc方式):
df.iloc[:3,:2]
下述代碼實現(xiàn)選擇前三行前兩列的數(shù)據(jù)(loc方式):
df.loc[:2,['group','year']]
注:當使用loc時,包括索引的上界,而使用iloc則不包括索引的上界。
下述代碼實現(xiàn)選擇"1","3","5"行、"year","value_1"列的數(shù)據(jù)(loc方式):
df.loc[[1,3,5],['year','value_1']]
此函數(shù)用于計算一系列值的變化百分比。假設我們有一個包含[2,3,6]的序列。如果我們對這個序列應用pct_change,則返回的序列將是[NaN,0.5,1.0]。從第一個元素到第二個元素增加了50%,從第二個元素到第三個元素增加了100%。Pct_change函數(shù)用于比較元素時間序列中的變化百分比。
df.value_1.pct_change()
Rank函數(shù)實現(xiàn)對數(shù)據(jù)進行排序。假設我們有一個包含[1,7,5,3]的序列。分配給這些值的等級為[1,4,3,2]。
df['rank_1'] = df['value_1'].rank() df
Melt用于將維數(shù)較大的 dataframe轉(zhuǎn)換為維數(shù)較少的 dataframe。一些dataframe列中包含連續(xù)的度量或變量。在某些情況下,將這些列表示為行可能更適合我們的任務??紤]以下情況:
我們有三個不同的城市,在不同的日子進行測量。我們決定將這些日子表示為列中的行。還將有一列顯示測量值。我們可以通過使用'melt'函數(shù)輕松實現(xiàn):
df_wide.melt(id_vars=['city']) df
變量名和列名通常默認給出。我們也可以使用melt函數(shù)的var_name和value_name參數(shù)來指定新的列名。
假設數(shù)據(jù)集在一個觀測(行)中包含一個要素的多個條目,但您希望在單獨的行中分析它們。
我們想在不同的行上看到“c”的測量值,這很容易用explode來完成。
df1.explode('measurement').reset_index(drop=True) df
Nunique統(tǒng)計列或行上的唯一條目數(shù)。它在分類特征中非常有用,特別是在我們事先不知道類別數(shù)量的情況下。讓我們看看我們的初始數(shù)據(jù):
df.year.nunique() 10 df.group.nunique() 3
我們可以直接將nunique函數(shù)應用于dataframe,并查看每列中唯一值的數(shù)量:
如果axis參數(shù)設置為1,nunique將返回每行中唯一值的數(shù)目。
'lookup'可以用于根據(jù)行、列的標簽在dataframe中查找指定值。假設我們有以下數(shù)據(jù):
我們要創(chuàng)建一個新列,該列顯示“person”列中每個人的得分:
df['Person_point'] = df.lookup(df.index, df['Person']) df
Pandas支持廣泛的數(shù)據(jù)類型,其中之一就是object。object包含文本或混合(數(shù)字和非數(shù)字)值。但是,如果有其他選項可用,則不建議使用對象數(shù)據(jù)類型。使用更具體的數(shù)據(jù)類型,某些操作執(zhí)行得更快。例如,對于數(shù)值,我們更喜歡使用整數(shù)或浮點數(shù)據(jù)類型。
infer_objects嘗試為對象列推斷更好的數(shù)據(jù)類型??紤]以下數(shù)據(jù):
df2.dtypes A object B object C object D object dtype: object
通過上述代碼可知,現(xiàn)有所有的數(shù)據(jù)類型默認都是object。讓我們看看推斷的數(shù)據(jù)類型是什么:
df2.infer_objects().dtypes A int64 B float64 C bool D object dtype: object
'infer_obejects'可能看起來微不足道,但在有很多列時作用巨大。
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
整個 dataframe 占用的內(nèi)存(轉(zhuǎn)換為以MB為單位):
df_large.memory_usage().sum() / (1024**2) #converting to megabytes 15.2589111328125
describe函數(shù)計算數(shù)字列的基本統(tǒng)計信息,這些列包括計數(shù)、平均值、標準偏差、最小值和最大值、中值、第一個和第三個四分位數(shù)。因此,它提供了dataframe的統(tǒng)計摘要。
Merge()根據(jù)共同列中的值組合dataframe??紤]以下兩個數(shù)據(jù):
我們可以基于列中的共同值合并它們。設置合并條件的參數(shù)是“on”參數(shù)。
df1和df2是基于column_a列中的共同值進行合并的,merge函數(shù)的how參數(shù)允許以不同的方式組合dataframe,如:“inner”、“outer”、“l(fā)eft”、“right”等。
Select_dtypes函數(shù)根據(jù)對數(shù)據(jù)類型設置的條件返回dataframe的子集。它允許使用include和exlude參數(shù)包含或排除某些數(shù)據(jù)類型。
df.select_dtypes(include='int64')
df.select_dtypes(exclude='int64')
顧名思義,它允許替換dataframe中的值。第一個參數(shù)是要替換的值,第二個參數(shù)是新值。
df.replace('A', 'A_1')
我們也可以在同一個字典中多次替換。
df.replace({'A':'A_1', 'B':'B_1'})
Applymap用于將一個函數(shù)應用于dataframe中的所有元素。請注意,如果操作的矢量化版本可用,那么它應該優(yōu)先于applymap。例如,如果我們想將每個元素乘以一個數(shù)字,我們不需要也不應該使用applymap函數(shù)。在這種情況下,簡單的矢量化操作(例如df*4)要快得多。
然而,在某些情況下,我們可能無法選擇矢量化操作。例如,我們可以使用pandas dataframes的style屬性更改dataframe的樣式。以下代碼將負值的顏色設置為紅色:
def color_negative_values(val): color = 'red' if val < 0 else 'black' return 'color: %s' % color
通過Applymap將上述代碼應用到dataframe:
df3.style.applymap(color_negative_values)
作者:Soner Y?ld?r?m
deephub翻譯組:Oliver Lee
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
LSTM 模型輸入長度選擇技巧:提升序列建模效能的關鍵? 在循環(huán)神經(jīng)網(wǎng)絡(RNN)家族中,長短期記憶網(wǎng)絡(LSTM)憑借其解決長序列 ...
2025-07-11CDA 數(shù)據(jù)分析師報考條件詳解與準備指南? ? 在數(shù)據(jù)驅(qū)動決策的時代浪潮下,CDA 數(shù)據(jù)分析師認證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據(jù)透視表中兩列相乘合計的實用指南? 在數(shù)據(jù)分析的日常工作中,數(shù)據(jù)透視表憑借其強大的數(shù)據(jù)匯總和分析功能,成為了 Excel 用戶 ...
2025-07-11尊敬的考生: 您好! 我們誠摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實施重大更新。 此次更新旨在確保認 ...
2025-07-10BI 大數(shù)據(jù)分析師:連接數(shù)據(jù)與業(yè)務的價值轉(zhuǎn)化者? ? 在大數(shù)據(jù)與商業(yè)智能(Business Intelligence,簡稱 BI)深度融合的時代,BI ...
2025-07-10SQL 在預測分析中的應用:從數(shù)據(jù)查詢到趨勢預判? ? 在數(shù)據(jù)驅(qū)動決策的時代,預測分析作為挖掘數(shù)據(jù)潛在價值的核心手段,正被廣泛 ...
2025-07-10數(shù)據(jù)查詢結束后:分析師的收尾工作與價值深化? ? 在數(shù)據(jù)分析的全流程中,“query end”(查詢結束)并非工作的終點,而是將數(shù) ...
2025-07-10CDA 數(shù)據(jù)分析師考試:從報考到取證的全攻略? 在數(shù)字經(jīng)濟蓬勃發(fā)展的今天,數(shù)據(jù)分析師已成為各行業(yè)爭搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢性檢驗:捕捉數(shù)據(jù)背后的時間軌跡? 在數(shù)據(jù)分析的版圖中,單樣本趨勢性檢驗如同一位耐心的偵探,專注于從單 ...
2025-07-09year_month數(shù)據(jù)類型:時間維度的精準切片? ? 在數(shù)據(jù)的世界里,時間是最不可或缺的維度之一,而year_month數(shù)據(jù)類型就像一把精準 ...
2025-07-09CDA 備考干貨:Python 在數(shù)據(jù)分析中的核心應用與實戰(zhàn)技巧? ? 在 CDA 數(shù)據(jù)分析師認證考試中,Python 作為數(shù)據(jù)處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗:數(shù)據(jù)趨勢與突變分析的有力工具? ? ? 在數(shù)據(jù)分析的廣袤領域中,準確捕捉數(shù)據(jù)的趨勢變化以及識別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據(jù)分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據(jù)分析師認證作為國內(nèi)權威的數(shù)據(jù)分析能力認證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應對策略? 長短期記憶網(wǎng)絡(LSTM)作為循環(huán)神經(jīng)網(wǎng)絡(RNN)的一種變體,憑借獨特的門控機制,在 ...
2025-07-07統(tǒng)計學方法在市場調(diào)研數(shù)據(jù)中的深度應用? 市場調(diào)研是企業(yè)洞察市場動態(tài)、了解消費者需求的重要途徑,而統(tǒng)計學方法則是市場調(diào)研數(shù) ...
2025-07-07CDA數(shù)據(jù)分析師證書考試全攻略? 在數(shù)字化浪潮席卷全球的當下,數(shù)據(jù)已成為企業(yè)決策、行業(yè)發(fā)展的核心驅(qū)動力,數(shù)據(jù)分析師也因此成為 ...
2025-07-07剖析 CDA 數(shù)據(jù)分析師考試題型:解鎖高效備考與答題策略? CDA(Certified Data Analyst)數(shù)據(jù)分析師考試作為衡量數(shù)據(jù)專業(yè)能力的 ...
2025-07-04SQL Server 字符串截取轉(zhuǎn)日期:解鎖數(shù)據(jù)處理的關鍵技能? 在數(shù)據(jù)處理與分析工作中,數(shù)據(jù)格式的規(guī)范性是保證后續(xù)分析準確性的基礎 ...
2025-07-04CDA 數(shù)據(jù)分析師視角:從數(shù)據(jù)迷霧中探尋商業(yè)真相? 在數(shù)字化浪潮席卷全球的今天,數(shù)據(jù)已成為企業(yè)決策的核心驅(qū)動力,CDA(Certifie ...
2025-07-04CDA 數(shù)據(jù)分析師:開啟數(shù)據(jù)職業(yè)發(fā)展新征程? ? 在數(shù)據(jù)成為核心生產(chǎn)要素的今天,數(shù)據(jù)分析師的職業(yè)價值愈發(fā)凸顯。CDA(Certified D ...
2025-07-03