溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

實用的pandas知識點有哪些

發(fā)布時間:2021-10-25 17:16:16 來源:億速云 閱讀:143 作者:iii 欄目:編程語言

這篇文章主要介紹“實用的pandas知識點有哪些”,在日常操作中,相信很多人在實用的pandas知識點有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”實用的pandas知識點有哪些”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

1 簡介

pandas作為開展數(shù)據(jù)分析的利器,蘊含了與數(shù)據(jù)處理相關(guān)的豐富多樣的API,使得我們可以靈活方便地對數(shù)據(jù)進行各種加工,但很多pandas中的實用方法其實大部分人都是不知道的,今天就來給大家介紹6個不太為人們所所熟知的實用pandas小技巧。

實用的pandas知識點有哪些  
圖1  
 

2 6個實用的pandas小知識

 

2.1 Series與DataFrame的互轉(zhuǎn)

很多時候我們計算過程中產(chǎn)生的結(jié)果是Series格式的,而接下來的很多操作尤其是使用「鏈式」語法時,需要銜接著傳入DataFrame格式的變量,這種時候我們就可以使用到pandasSeriesDataFrame轉(zhuǎn)換的方法:

  • 「利用to_frame()實現(xiàn)Series轉(zhuǎn)DataFrame」
s = pd.Series([0, 1, 2])

# Series轉(zhuǎn)為DataFrame,name參數(shù)用于指定轉(zhuǎn)換后的字段名
s = s.to_frame(name='列名')
s
 
實用的pandas知識點有哪些  
圖2  

順便介紹一下單列數(shù)據(jù)組成的數(shù)據(jù)框轉(zhuǎn)為Series的方法:

  • 「利用squeeze()實現(xiàn)單列數(shù)據(jù)DataFrame轉(zhuǎn)Series」
# 只有單列數(shù)據(jù)的DataFrame轉(zhuǎn)為Series
s.squeeze()
 
實用的pandas知識點有哪些  
圖3  
 

2.2 隨機打亂DataFrame的記錄行順序

有時候我們需要對數(shù)據(jù)框整體的行順序進行打亂,譬如在訓練機器學習模型時,打亂原始數(shù)據(jù)順序后取前若干行作為訓練集后若干行作為測試集,這在pandas中可以利用sample()方法快捷實現(xiàn)。

sample()方法的本質(zhì)功能是從原始數(shù)據(jù)中抽樣行記錄,默認為不放回抽樣,其參數(shù)frac用于控制抽樣比例,我們將其設(shè)置為1則等價于打亂順序:

df = pd.DataFrame({
    'V1': range(5),
    'V2': range(5)
})
df.sample(frac=1)
 
實用的pandas知識點有哪些  
圖4  
 

2.3 利用類別型數(shù)據(jù)減少內(nèi)存消耗

當我們的數(shù)據(jù)框中某些列是由少數(shù)幾種值大量重復形成時,會消耗大量的內(nèi)存,就像下面的例子一樣:

import numpy as np

pool = ['A', 'B', 'C', 'D']

# V1列由ABCD大量重復形成
df = pd.DataFrame({
    'V1': np.random.choice(pool, 1000000)
})

# 查看內(nèi)存使用情況
df.memory_usage(deep=True)
 
實用的pandas知識點有哪些  
圖5  
  

這種時候我們可以使用到pandas數(shù)據(jù)類型中的類別型來極大程度上減小內(nèi)存消耗:

df['V1'] = df['V1'].astype('category')
df.memory_usage(deep=True)
 
實用的pandas知識點有哪些  
圖6  
  

可以看到,轉(zhuǎn)換類型之后內(nèi)存消耗減少了將近98.3%!

 

2.4 pandas中的object類型陷阱

在日常使用pandas處理數(shù)據(jù)的過程中,經(jīng)常會遇到object這種數(shù)據(jù)類型,很多初學者都會把它視為字符串,事實上objectpandas中可以代表不確定的數(shù)據(jù)類型,即類型為objectSeries中可以混雜著多種數(shù)據(jù)類型:

s = pd.Series(['111100', '111100', 111100, '111100'])
s
 
實用的pandas知識點有哪些  
圖7  

查看類型分布:

s.apply(lambda s: type(s))
 
實用的pandas知識點有哪些  
圖8  

這種情況下,如果貿(mào)然當作字符串列來處理,對應的無法處理的元素只會變成缺失值而不報錯,給我們的分析過程帶來隱患:

s.str.replace('00', '11')
 
實用的pandas知識點有哪些  
圖9  

這種時候就一定要先轉(zhuǎn)成對應的類型,再執(zhí)行相應的方法:

s.astype('str').str.replace('00', '11')
 
實用的pandas知識點有哪些  
圖10  
 

2.5 快速判斷每一列是否有缺失值

pandas中我們可以對單個Series查看hanans屬性來了解其是否包含缺失值,而結(jié)合apply(),我們就可以快速查看整個數(shù)據(jù)框中哪些列含有缺失值:

df = pd.DataFrame({
    'V1': [1, 2, None, 4],
    'V2': [1, 2, 3, 4],
    'V3': [None, 1, 2, 3]
})

df.apply(lambda s: s.hasnans)
 
實用的pandas知識點有哪些  
圖11  
 

2.6 使用rank()計算排名時的五種策略

pandas中我們可以利用rank()方法計算某一列數(shù)據(jù)對應的排名信息,但在rank()中有參數(shù)method來控制具體的結(jié)果計算策略,有以下5種策略,在具體使用的時候要根據(jù)需要靈活選擇:

  • 「average」

average策略下,相同數(shù)值的元素的排名是其內(nèi)部排名的均值:

s = pd.Series([1, 2, 2, 2, 3, 4, 4, 5, 6])
s.rank(method='average')
 
實用的pandas知識點有哪些  
圖12  
  • 「min」

min策略下,相同元素的排名為其內(nèi)部排名的最小值:

s.rank(method='min')
 
實用的pandas知識點有哪些  
圖13  
  • 「max」

max策略與min正好相反,取的是相同元素內(nèi)部排名的最大值:

s.rank(method='max')
 
實用的pandas知識點有哪些  
圖14  
  • 「dense」

dense策略下,相當于對序列去重后進行排名,再將每個元素的排名賦給相同的每個元素,這種方式也是比較貼合實際需求的:

s.rank(method='dense')
 
實用的pandas知識點有哪些  
圖15  
  • 「first」

first策略下,當多個元素相同時,會根據(jù)這些相同元素在實際Series中的順序分配排名:

s = pd.Series([2, 2, 2, 1, 3])
s.rank(method='first')
 
實用的pandas知識點有哪些  
圖16  


到此,關(guān)于“實用的pandas知識點有哪些”的學習就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI