點擊上方"藍字"關注咱們web
記錄 分享 成長微信
1 簡介
pandas
做爲開展數據分析的利器,蘊含了與數據處理相關的豐富多樣的API,使得咱們能夠靈活方便地對數據進行各類加工,但不少pandas
中的實用方法其實大部分人都是不知道的,今天就來給你們介紹6個不太爲人們所所熟知的實用pandas
小技巧。app
2 6個實用的pandas
小知識
2.1 Series與DataFrame的互轉
不少時候咱們計算過程當中產生的結果是Series
格式的,而接下來的不少操做尤爲是使用「鏈式」語法時,須要銜接着傳入DataFrame
格式的變量,這種時候咱們就可使用到pandas
中Series
向DataFrame
轉換的方法:less
-
「利用to_frame()實現Series轉DataFrame」
s = pd.Series([0, 1, 2])
# Series轉爲DataFrame,name參數用於指定轉換後的字段名
s = s.to_frame(name='列名')
s
順便介紹一下單列數據組成的數據框轉爲Series
的方法:dom
-
「利用squeeze()實現單列數據DataFrame轉Series」
# 只有單列數據的DataFrame轉爲Series
s.squeeze()
2.2 隨機打亂DataFrame的記錄行順序
有時候咱們須要對數據框總體的行順序進行打亂,譬如在訓練機器學習模型時,打亂原始數據順序後取前若干行做爲訓練集後若干行做爲測試集,這在pandas
中能夠利用sample()
方法快捷實現。機器學習
sample()
方法的本質功能是從原始數據中抽樣行記錄,默認爲不放回抽樣,其參數frac
用於控制抽樣比例,咱們將其設置爲1則等價於打亂順序:編輯器
df = pd.DataFrame({
'V1': range(5),
'V2': range(5)
})
df.sample(frac=1)
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)
這種時候咱們可使用到pandas
數據類型中的類別型來極大程度上減少內存消耗:測試
df['V1'] = df['V1'].astype('category')
df.memory_usage(deep=True)
能夠看到,轉換類型以後內存消耗減小了將近98.3%!大數據
2.4 pandas中的object類型陷阱
在平常使用pandas
處理數據的過程當中,常常會遇到object
這種數據類型,不少初學者都會把它視爲字符串,事實上object
在pandas
中能夠表明不肯定的數據類型,即類型爲object
的Series
中能夠混雜着多種數據類型:
s = pd.Series(['111100', '111100', 111100, '111100'])
s
查看類型分佈:
s.apply(lambda s: type(s))
這種狀況下,若是貿然看成字符串列來處理,對應的沒法處理的元素只會變成缺失值而不報錯,給咱們的分析過程帶來隱患:
s.str.replace('00', '11')
這種時候就必定要先轉成對應的類型,再執行相應的方法:
s.astype('str').str.replace('00', '11')
2.5 快速判斷每一列是否有缺失值
在pandas
中咱們能夠對單個Series
查看hanans
屬性來了解其是否包含缺失值,而結合apply()
,咱們就能夠快速查看整個數據框中哪些列含有缺失值:
df = pd.DataFrame({
'V1': [1, 2, None, 4],
'V2': [1, 2, 3, 4],
'V3': [None, 1, 2, 3]
})
df.apply(lambda s: s.hasnans)
2.6 使用rank()計算排名時的五種策略
在pandas
中咱們能夠利用rank()
方法計算某一列數據對應的排名信息,但在rank()
中有參數method
來控制具體的結果計算策略,有如下5種策略,在具體使用的時候要根據須要靈活選擇:
-
「average」
在average
策略下,相同數值的元素的排名是其內部排名的均值:
s = pd.Series([1, 2, 2, 2, 3, 4, 4, 5, 6])
s.rank(method='average')
-
「min」
在min
策略下,相同元素的排名爲其內部排名的最小值:
s.rank(method='min')
-
「max」
max
策略與min
正好相反,取的是相同元素內部排名的最大值:
s.rank(method='max')
-
「dense」
在dense
策略下,至關於對序列去重後進行排名,再將每一個元素的排名賦給相同的每一個元素,這種方式也是比較貼合實際需求的:
s.rank(method='dense')
-
「first」
在first
策略下,當多個元素相同時,會根據這些相同元素在實際Series
中的順序分配排名:
s = pd.Series([2, 2, 2, 1, 3])
s.rank(method='first')
關於pandas
還有不少實用的小知識,之後會慢慢給你們不按期分享~歡迎在評論區與我進行討論
咱們的知識星球【Python大數據分析】
限時優惠中(還有4天)!掃碼領券
年費立減20,僅需59元~
快來一塊兒玩轉數據分析吧🚀🚀🚀
Python大數據分析
data creates value
掃碼關注咱們
本文分享自微信公衆號 - Python大數據分析(pydatas)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。