所以,本文以Kaggle網站的「Netflix data with IMDB scores added」資料集(mycsvfile.csv)為例,來和大家分享3個技巧,減少Pandas套件在處理大型資料時的記憶體耗用,以及提升讀取效率,包含:
- Pandas去除不需要的資料
- Pandas精確設定欄位資料型態
- Pandas切分資料
一、Pandas去除不需要的資料
在資料分析的過程中,有時並不是所有的CSV檔案欄位都是會使用到的,所以在呼叫Pandas套件的read_csv()方法(Method)時,相對於讀取所有欄位的大量資料,可以設定usecols關鍵字參數,僅讀取會使用到欄位,如下範例:
import pandas as pd #所需的欄位 usecols = ['type', 'title', 'director', 'date_added', 'rating'] df = pd.read_csv('mycsvfile.csv', usecols=usecols) print(df)
執行結果
讀取所要的資料欄位後,其中具有遺漏值的資料如果不需要,可以透過Pandas套件的dropna()方法(Method)進行去除,節省後續記憶體處理的資料量,如下範例:
import pandas as pd #所需的欄位 usecols = ['type', 'title', 'director', 'date_added', 'rating'] df = pd.read_csv('mycsvfile.csv', usecols=usecols) new_df = df.dropna() print(new_df)
執行結果
當然,dropna()方法(Method)還有以下3個關鍵字參數能夠依據需求來設定去除遺漏值的條件:
- how:any(只要任一欄位有遺漏值就去除)、all(所有欄位皆有遺漏值就去除)
- thresh:設定一筆資料有幾個遺漏值就移除
- subset:設定檢查遺漏值的欄位
二、Pandas精確設定欄位資料型態
使用Pandas套件的read_csv()方法(Method)讀取CSV檔案資料時,也需要對所讀取的欄位設定精確的資料型態,尤其是數值類型的資料,避免耗用多餘的記憶體資源。
舉例來說,同樣是浮點數的資料,如果能夠視需求設定讀取float32型態,將會比float64型態佔用較少的記憶體資源,這時後就可以搭配Numpy套件來進行設定,安裝指令如下:
$ pip install numpy
而設定Pandas套件的讀取資料型態如下範例:
import pandas as pd import numpy as np usecols = ['type', 'title', 'director', 'date_added', 'rating'] df = pd.read_csv('mycsvfile.csv', usecols=usecols, dtype={'type':str, 'title':str, 'director':str, 'date_added':str, 'rating':np.float32}) new_df = df.dropna() print(new_df)
執行結果
三、Pandas切分資料
相較於一次讀取大量的資料,我們可以將資料依需求或記憶體資源切分為多個區塊(chunk),最後再把處理好的各區塊(chunk)進行合併,如下範例:
import pandas as pd #清理區塊中的遺漏值函式 def chunk_cleaning(data_chunk): cleaned_chunk = data_chunk.dropna() return cleaned_chunk #將CSV檔案以1000筆資料切分為一區塊 data_chunks = pd.read_csv('mycsvfile.csv', chunksize=1000) chunk_list = [] #暫存各區塊的處理結果 for data_chunk in data_chunks: #讀取各區塊 cleaned_chunk = chunk_cleaning(data_chunk) #清理區塊中的遺漏值 chunk_list.append(cleaned_chunk) #將清理後的區塊結果暫存在串列(List)中 combined_chunk = pd.concat(chunk_list) #將各區塊的結果進行合併 print(combined_chunk)
截取部分執行結果
以上從第12行開始的實作步驟如下:- 切分資料區塊(chunk)
- 讀取各個資料區塊(chunk)
- 處理各個資料區塊(chunk)
- 暫存各個資料區塊(chunk)的處理結果
- 合併各個資料區塊(chunk)
四、小結
以上就是在使用Pandas套件面對大型資料量的檔案時,可以利用的3個技巧,來減少記憶體資源的耗用,並且提升資料的讀取效率,總結來說,就是僅讀取所需的欄位、精確設定欄位型態與切分資料,希望能夠幫助大家節省資料分析的時間與記憶體資源。
有其它的Pandas套件讀取資料優化技巧也歡迎在底下留言和我分享交流唷~
如果喜歡我的文章,別忘了在下面訂閱本網站,以及幫我按五下Like(使用Google或Facebook帳號免費註冊),支持我創作教學文章,回饋由LikeCoin基金會出資,完全不會花到錢,感謝大家。
- [Pandas教學]一定要學會的Pandas套件讀寫Google Sheets試算表資料秘訣
- [Pandas教學]客製化Pandas DataFrame樣式提升資料可讀性的實用方法
- [Pandas教學]3個Pandas套件合併多個CSV檔案資料的實用技巧
- Pandas教學]看完這篇就懂Pandas套件如何即時讀取API的回應資料
- [Pandas教學]快速掌握Pandas套件讀寫SQLite資料庫的重要方法
- [Pandas教學]輕鬆入門3個常見的Pandas套件排序資料方式
- [Pandas教學]有效利用Pandas套件篩選資料的應用技巧
- [Pandas教學]善用Pandas套件的Groupby與Aggregate方法提升資料解讀效率
- [Pandas教學]使用Pandas套件實作資料清理的必備觀念(上)
- [Pandas教學]使用Pandas套件實作資料清理的必備觀念(下)
- Visual Studio Code漂亮印出Pandas DataFrame資料的實用方法
- [Pandas教學]資料視覺化必懂的Pandas套件繪製Matplotlib分析圖表實戰
- [Pandas教學]5個實用的Pandas讀取Excel檔案資料技巧
- 解析Python網頁爬蟲如何有效整合Pandas套件提升資料處理效率
- [Pandas教學]掌握Pandas DataFrame讀取網頁表格的實作技巧
- [Pandas教學]資料分析必懂的Pandas DataFrame處理雙維度資料方法
- [Pandas教學]資料分析必懂的Pandas Series處理單維度資料方法
留言
張貼留言