6個冷門但實用的pandas知識點

點擊上方"藍字"關注咱們web





Python大數據分析


記錄   分享   成長微信


添加微信號" CNFeffery "加入技術交流羣

1 簡介

pandas做爲開展數據分析的利器,蘊含了與數據處理相關的豐富多樣的API,使得咱們能夠靈活方便地對數據進行各類加工,但不少pandas中的實用方法其實大部分人都是不知道的,今天就來給你們介紹6個不太爲人們所所熟知的實用pandas小技巧。app

圖1

2 6個實用的pandas小知識

2.1 Series與DataFrame的互轉

不少時候咱們計算過程當中產生的結果是Series格式的,而接下來的不少操做尤爲是使用「鏈式」語法時,須要銜接着傳入DataFrame格式的變量,這種時候咱們就可使用到pandasSeriesDataFrame轉換的方法:less

  • 「利用to_frame()實現Series轉DataFrame」
s = pd.Series([012])

# Series轉爲DataFrame,name參數用於指定轉換後的字段名
s = s.to_frame(name='列名')
s
圖2

順便介紹一下單列數據組成的數據框轉爲Series的方法:dom

  • 「利用squeeze()實現單列數據DataFrame轉Series」
# 只有單列數據的DataFrame轉爲Series
s.squeeze()
圖3

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

有時候咱們須要對數據框總體的行順序進行打亂,譬如在訓練機器學習模型時,打亂原始數據順序後取前若干行做爲訓練集後若干行做爲測試集,這在pandas中能夠利用sample()方法快捷實現。機器學習

sample()方法的本質功能是從原始數據中抽樣行記錄,默認爲不放回抽樣,其參數frac用於控制抽樣比例,咱們將其設置爲1則等價於打亂順序:編輯器

df = pd.DataFrame({
    'V1': range(5),
    'V2': range(5)
})
df.sample(frac=1)
圖4

2.3 利用類別型數據減小內存消耗

當咱們的數據框中某些列是由少數幾種值大量重複造成時,會消耗大量的內存,就像下面的例子同樣:學習

import numpy as np

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

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

# 查看內存使用狀況
df.memory_usage(deep=True)
圖5
  

這種時候咱們可使用到pandas數據類型中的類別型來極大程度上減少內存消耗:測試

df['V1'] = df['V1'].astype('category')
df.memory_usage(deep=True)
圖6
  

能夠看到,轉換類型以後內存消耗減小了將近98.3%!大數據

2.4 pandas中的object類型陷阱

在平常使用pandas處理數據的過程當中,常常會遇到object這種數據類型,不少初學者都會把它視爲字符串,事實上objectpandas中能夠表明不肯定的數據類型,即類型爲objectSeries中能夠混雜着多種數據類型:

s = pd.Series(['111100''111100'111100'111100'])
s
圖7

查看類型分佈:

s.apply(lambda s: type(s))
圖8

這種狀況下,若是貿然看成字符串列來處理,對應的沒法處理的元素只會變成缺失值而不報錯,給咱們的分析過程帶來隱患:

s.str.replace('00''11')
圖9

這種時候就必定要先轉成對應的類型,再執行相應的方法:

s.astype('str').str.replace('00''11')
圖10

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

pandas中咱們能夠對單個Series查看hanans屬性來了解其是否包含缺失值,而結合apply(),咱們就能夠快速查看整個數據框中哪些列含有缺失值:

df = pd.DataFrame({
    'V1': [12None4],
    'V2': [1234],
    'V3': [None123]
})

df.apply(lambda s: s.hasnans)
圖11

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

pandas中咱們能夠利用rank()方法計算某一列數據對應的排名信息,但在rank()中有參數method來控制具體的結果計算策略,有如下5種策略,在具體使用的時候要根據須要靈活選擇:

  • 「average」

average策略下,相同數值的元素的排名是其內部排名的均值:

s = pd.Series([122234456])
s.rank(method='average')
圖12
  • 「min」

min策略下,相同元素的排名爲其內部排名的最小值:

s.rank(method='min')
圖13
  • 「max」

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

s.rank(method='max')
圖14
  • 「dense」

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

s.rank(method='dense')
圖15
  • 「first」

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

s = pd.Series([22213])
s.rank(method='first')
圖16

關於pandas還有不少實用的小知識,之後會慢慢給你們不按期分享~歡迎在評論區與我進行討論

咱們的知識星球【Python大數據分析】

限時優惠中(還有4天)!掃碼領券

年費立減20僅需59元~

快來一塊兒玩轉數據分析吧🚀🚀🚀


· 往期精選 ·
1

Python中的yield究竟是個什麼鬼?

2

在pandas中使用數據透視表

3

在模仿中精進數據可視化03:OD數據的特殊可視化方式




Python大數據分析

data creates value

掃碼關注咱們


本文分享自微信公衆號 - Python大數據分析(pydatas)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索