6個提升效率的pandas小技巧

2021-01-12 Python綠色通道

pandas是python中常用的數據分析庫,出現頻率非常高,而且pandas功能之多讓人咋舌,即使pandas老手也沒法保證能高效使用pandas做數據分析。

這篇文章目的梳理幾個高效實用的pandas小技巧,供大家參考。

1. 從剪切板中創建DataFrame

pandas中的read_clipboard()方法非常神奇,可以把剪切板中的數據變成dataframe格式,也就是說直接在excel中複製表格,可以快速轉化為dataframe。

以下面這個excel數據表為例,全部選中,按ctrl+c複製:

然後在python中執行pd.read_clipboard(),就能得到一模一樣的dataframe數據表:

pd.read_clipboard()

這功能對經常在excel和python中切換的分析師來說簡直是福音,excel中的數據能一鍵轉化為pandas可讀格式。

2.  通過數據類型選擇columns

數據分析過程可能會需要篩選數據列,比如只需要數值列,以經典的泰坦尼克數據集為例:

import seaborn as sns
# 導出泰坦尼克數據集
df = sns.load_dataset('titanic')
df.head()

查看該數據集各列的數據類型:

df.dtypes

可以看到各列的數據類型不太一樣,有int、object、float、bool等。

如果說我只要需要數值列,也就是數據類型為int、float的列,可以通過select_dtypes方法實現:

df.select_dtypes(include='number').head()

選擇除數據類型為int外其他的列,注意這裡的參數是exclude:

df.select_dtypes(exclude='int').head()

也可以選擇多種數據類型:

df.select_dtypes(include=['int', 'datetime', 'object']).head()

3. 將strings改為numbers

在pandas中,有兩種方法可以將字符串改為數值:

先創建一個樣本dataframe,看看這兩種方法有什麼不同。

import pandas as pd
df = pd.DataFrame({ 'product': ['A','B','C','D'], 
                   'price': ['10','20','30','40'],
                   'sales': ['20','-','60','-']
                  })
df

product列是字符串類型,price、sales列雖然內容有數字,但它們的數據類型也是字符串。

值得注意的是,price列都是數字,sales列有數字,但空值用-代替了。

df.dtypes

下面我們用astype()方法將price列的數據類型改為int:

df['price'] = df['price'].astype(int)
# 或者用另一種方式
df = df.astype({'price': 'int'})

但如果你同樣用astype()方法更改sales列的話就會出現報錯:

df['sales'] = df['sales'].astype(int)

原因是sales列裡面的內容除了數字外還有-,它是字符串,沒辦法轉化為int。

而to_numeric()方法卻可以解決這一問題,只需要設置參數errors='coerce'。

df['sales'] = pd.to_numeric(df['sales'], errors='coerce')

df

現在sale列中的-已經被替換成了NaN,它的數據類型也變成了float。

df.dtypes

4. 檢測並處理缺失值

有一種比較通用的檢測缺失值的方法是info(),它可以統計每列非缺失值的數量。

還是用泰坦尼克數據集:

import seaborn as sns
# 導出泰坦尼克數據集
df = sns.load_dataset('titanic')
df.info()

標紅色地方是有缺失值的列,並且給出了非缺失值的數量,你可以計算出該列有多少缺失值。

這樣看可能不夠直觀,那可以用df.isnull().sum()方法很清楚地得到每列有多少缺失值:

df.isnull().sum()

df.isnull().sum().sum()則能夠返回該數據集總共有多少缺失值:

df.isnull().sum().sum()

還可以看缺失值在該列的佔比是多少,用df.isna().mean()方法:

df.isna().mean()

注意:這裡isnull()和isna()使用效果一樣。

那如何處理缺失值呢?

兩種方式:刪除和替換。

df.dropna(axis = 0)

df.dropna(axis = 1)

df.dropna(thresh=len(df)*0.9, axis=1)

df.fillna(value=10)

df.fillna(axis=0, method='ffill')

df.fillna(axis=1, method='ffill')

df.fillna(axis=0, method='bfill')

df.fillna(axis=1, method='bfill')

df['Age'].fillna(value=df['Age'].mean(), inplace=True)

當然你還可以用最大最小值、分位數值等來替換缺失值。

5. 對連續數據進行離散化處理

在數據準備過程中,常常會組合或者轉換現有特徵以創建一個新的特徵,其中將連續數據離散化是非常重要的特徵轉化方式,也就是將數值變成類別特徵。

同樣以泰坦尼克數據集為例,裡面有一列是年齡特徵age:

import seaborn as sns
# 導出泰坦尼克數據集
df = sns.load_dataset('titanic')
df['age'].head()

年齡是一段連續值,如果我們想對它進行分組變成分類特徵,比如(<=12,兒童)、(<=18,青少年)、(<=60,成人)、(>60,老人),可以用cut方法實現:

import sys
df['ageGroup']=pd.cut(
                    df['age'], 
                    bins=[0, 13, 19, 61, sys.maxsize], 
                    labels=['兒童', '青少年', '成人', '老人']
                      )

df.head()

注意:這裡的sys.maxsize是指可以存儲的最大值。

可以看到新增了一列ageGroup,用以展示年齡分組:

df['ageGroup'].head()

6. 從多個文件中構建一個DataFrame

有時候數據集可能分布在多個excel或者csv文件中,但需要把它讀取到一個DataFrame中,這樣的需求該如何實現?

做法是分別讀取這些文件,然後將多個dataframe組合到一起,變成一個dataframe。

這裡使用內置的glob模塊,來獲取文件路徑,簡潔且更有效率。

在上圖中,glob()在指定目錄中查找所有以「 data_row_」開頭的CSV文件。

glob()以任意順序返回文件名,這就是為什麼使用sort()函數對列表進行排序的原因。

「行合併」

假設數據集按行分布在2個文件中,分別是data_row_1.csv和data_row_2.csv

用以下方法可以逐行合併:

files = sorted(glob('data/data_row_*.csv'))
pd.concat((pd.read_csv(file) for file in files), ignore_index=True)

sorted(glob('data/data_row_*.csv'))返回文件名,然後逐個讀取,並且使用concat()方法進行合併,得到結果:

「列合併」

假設數據集按列分布在2個文件中,分別是data_row_1.csv和data_row_2.csv

用以下方法可以逐列合併:

files = sorted(glob('data/data_col_*.csv'))
pd.concat((pd.read_csv(file) for file in files), axis=1)

sorted(glob('data/data_row_*.csv'))返回文件名,然後逐個讀取,並且使用concat()方法進行列合併(注意這裡axis=1),得到結果:

本文就到這裡,pandas還有很多讓人驚喜的小技巧,大家有興趣也可以在評論區說說你的使用心得。

相關焦點

  • 快速提升效率,這6個 Pandas 技巧一定要知道
    pandas是python中常用的數據分析庫,出現頻率非常高,而且pandas功能之多讓人咋舌,即使pandas老手也沒法保證能高效使用pandas做數據分析。這篇文章目的梳理幾個高效實用的pandas小技巧,供大家參考。1.
  • 幾個Pandas參數設置小技巧
    在日常使用pandas的過程中,由於我們所分析的數據表規模、格式上的差異,使得同樣的函數或方法作用在不同數據上的效果存在差異。而pandas有著自己的一套「參數設置系統」,可以幫助我們在遇到不同的數據時靈活調節從而達到最好的效果,本文就將介紹pandas中常用的參數設置方面的知識
  • pandas使用的25個技巧
    查詢pandas版本  如果你還想知道pandas所依賴的模塊的版本,你可以使用show_versions()函數:列序反轉逗號之前的冒號表示選擇所有行,逗號之後的::-1表示反轉所有的列,這就是為什麼country這一列現在在最右邊。6.
  • 用Pandas演示tips的小技巧,學到了嗎?
    無論是學生、數據科學家還是博士研究人員,這些技巧都一定能幫到你。下載Jupyter notebook,一起動動小手來試試吧!設置創建一個10行3列的數據幀,數值隨機。還可以在pandas分析伺服器上製作API,這樣就可以在網頁瀏覽器的數據幀中追蹤最新數值。注意,這需要用到lxml軟體包,可以用pip安裝lxml。
  • 如果你也基於pandas做數據分析,分享這幾個提高效率的小知識點
    本文基於數據分析庫pandas,分享我在工作中常常需要使用的幾個關於數據定位的常用語法以及幾個小知識點。01loc和iloc目前pandas的版本已經取消了ix和at等語法,推薦使用的是loc和iloc這兩種語法定位數據loc是location的縮寫,iloc是index_location的縮寫,前者是基於標籤(標籤是指通過列名或者索引名定位數據),後者是基於索引
  • 6個冷門但實用的pandas知識點
    作為開展數據分析的利器,蘊含了與數據處理相關的豐富多樣的API,使得我們可以靈活方便地對數據進行各種加工,但很多中的實用方法其實很多人都不熟悉,今天就來給大家介紹6個不太為人們所熟知的實用小技巧。
  • 提高數據處理效率,一行代碼開啟Pandas四倍速!
    快來了解新庫Modin,可以分割pandas的計算量,提高數據處理效率,一行代碼即刻開啟Pandas四倍速。首先了解一些基礎知識:Pandas作為Python中用於處理數據的庫,能簡單且靈活地處理不同種類、大小的數據。除此之外,Pandas還有許多函數有助於輕鬆處理不同數據。
  • 零基礎學Python--不得不說的Pandas小技巧
    今天我們就來講Pandas的一些使用方法和技巧,作為大家在寫Python程序時候的查閱筆記來使用。  我們仍然使用我們之前使用過的OHLCV數據作為示例,當然有些技巧中這個示例可能不足以表現其功能的強大,我們會適時的對數據進行一些修改。為了照顧沒有讀過以前文章的同學,我們照例貼出我們的CSV文件內容,其中『>』符號作為縮進使用。
  • 在pandas中使用pipe()提升代碼可讀性
    簡介我們在利用pandas開展數據分析時,應儘量避免過於「碎片化」的組織代碼,尤其是創建出過多不必要的「中間變量」,既浪費了「內存」,又帶來了關於變量命名的麻煩,更不利於整體分析過程代碼的可讀性,因此以流水線方式組織代碼非常有必要。
  • 數據分析從業者必看,10 個加速 python 數據分析的簡單的小技巧
    一些小的技巧在編程領域可能會非常有用,在數據科學領域同樣如此。數據科學愛好者 Parul Pandey 在近日發表了一篇博文,分享了在數據科學中非常實用的 10 個小技巧。雷鋒網 AI 科技評論將他的文章編譯整理如下。有時候,一點小小的黑客行為可以節省時間,挽救生命。一個小小的快捷方式或附加組件有時會被證明是天賜之物,並且可以真正提高生產力。所以,下面是我最喜歡的一些技巧,我以本文的形式一起使用和編譯它們。
  • iPhone 11 使用系統自帶鍵盤的 6 個小技巧
    如果你覺得自帶的輸入法還不夠好用,不妨再看看如下幾個小技巧,提升輸入效率,讓信息內容更豐富~1.Emoji 表情在鍵盤左下角可直接點擊 Emoji 表情,長按臉部可選擇不同膚色,下次再使用這個表情的時候,會優先使用你上次選擇的膚色。
  • Python數據分析利器,Pandas入門介紹,幫你便捷高效處理複雜數據
    關於Python的數據分析,當我們遇到的數據量小、數據結構簡單時,可以通過字典、列表等Python常見的數據結構來處理。但是當我們面對的大量數據以及複雜數據的局面時,就需要用一些專門用於數據分析的擴展庫來處理數據了。今天給大家介紹一個Python裡專門用來做數據分析和處理的擴展庫。
  • 一張圖看遍數據分析神器Pandas所有語法
    回想起自己剛畢業那會,要做很多處理,總是自己的讀取文件、篩選過濾、關聯文件、聚合統計、繪製圖表等等工作都是用Python原生語法實現,效率極其低下並且容易出錯,當我後來接觸到Pandas簡直喜愛的要哭。
  • 程式設計師必備的50個快捷鍵,提升效率必備!
    每天工作都和電腦打交道,所以掌握一些常用的電腦快捷鍵很重要,尤其是程式設計師,工作上效率,質量,速度少一個都不行。而使用快捷鍵能讓他們在工作時更高效,更速度!下面就和大家分享50個程式設計師必備電腦快捷鍵,幫你提升工作效率100倍!
  • 圖解四個實用的pandas函數!
    作者:Baijayanta Roy來源:towardsdatascience編譯&內容補充:早起Python在用python進行機器學習或者日常的數據處理中,pandas是最常用的Python庫之一,熟練掌握pandas是每一個數據科學家的必備技能,本文將用代碼+圖片詳解Pandas中的四個實用函數!
  • 不常見的Pandas小竅門:我打賭一定有你不知道的
    本文將分享一些少見但有用的Pandas技巧,它們能提升工作效率,讓生活更輕鬆。用剪貼板創建數據框眾所周知,Pandas可以使用SQLAlchemy從CSV、JSON甚至直接從資料庫輕鬆讀取數據,但你知道Pandas還可以從所用作業系統的剪貼板讀取數據嗎?假設有一個包含多個數據表的Excel文件。現在,需要在Python中處理其中一個表的部分數據。你通常會怎麼做?
  • 懶人秘籍:教你如何避免編寫pandas代碼
    開始pandas遊戲之旅,請閱讀如下資源:5個鮮為人知的pandas技巧使用pandas進行探索性數據分析第二個例子的速度之快令人驚訝。正確的方法是使用pandas對數據進行求和(或對列使用任何其他操作),這是第三個示例——也是最快的!2.如何避免過濾數據
  • 越是繪圖慢,越是要懂得4個CAD技巧,別總被效率阻礙升薪
    AutoCAD設計是一件很需要耐心以及細心的工作,耗時長是這項工作的常規操作,提升效率很關鍵,事實上也是為了趕一個作品,可能需要幾天幾夜不能合眼,畢竟畫圖慢是硬傷啊!當然這裡也不用著急,掌握一些技巧還是能夠緩解我們的效率問題,比如常見的快捷鍵,使用的心得技巧,雖然是很基礎的操作,掌握精通提升一倍的效率穩穩地,這裡就分享4個很實用的CAD技巧給你,過來人經驗分享,希望能夠給你帶去幫助!
  • 小程序流量主實戰技巧:三招提升廣告收益
    過去一年,小程序人均訪問次數提升45%,人均使用小程序個數提升98%。對流量主而言,意味著更大的商業潛力。(數據來源:微信公開課) 而要想充分挖掘流量價值,就離不開對流量的精細化運營,這也對流量主提出了新的挑戰:如何快速提升廣告變現效率,實現可持續的運營?
  • pandas基礎教程2
    選擇數據:我們在前面說pandas就像字典一樣,字典是可以通過鍵去選擇數據,同樣的pandas也是可以得,且pandas更強。DataFrame中的數據有兩個選取方式,df['A']或者df.A都可以,具體使用什麼方式看你的心情。