Mike的Python學院

Python、巨量資料處理與分析、資料處理、資料清理、PYTHON資料分析、Kaggle、資料分析、NumPy、Pandas

Mike Ku

Learn Code With Mike品牌創辦人

2021/11/24

3個優化Pandas套件讀取大型CSV檔案資料的技巧

本文以Kaggle網站的「Netflix data with IMDB scores added( https://www.kaggle.com/sarahjeeeze/imdbfile )」資料集為例,來和大家分享3個技巧,減少Pandas套件在處理大型資料時的記憶體耗用,以及提升讀取效率。
Q:Pandas如何去除不需要的資料?
在資料分析的過程中,有時並不是所有的CSV檔案欄位都是會使用到的,所以在呼叫Pandas套件的read_csv()方法(Method)時,相對於讀取所有欄位的大量資料,可以設定usecols關鍵字參數,僅讀取會使用到欄位,如下範例:
#所需的欄位
usecols = ['type', 'title', 'director', 'date_added', 'rating']
df = pd.read_csv('mycsvfile.csv', usecols=usecols)
讀取所要的資料欄位後,其中具有遺漏值的資料如果不需要,可以透過Pandas套件的dropna()方法(Method)進行去除,節省後續記憶體處理的資料量,如下範例:
new_df = df.dropna()
當然,dropna()方法(Method)還有以下3個關鍵字參數能夠依據需求來設定去除遺漏值的條件:
1.how:any(只要任一欄位有遺漏值就去除)、all(所有欄位皆有遺漏值就去除)
2.thresh:設定一筆資料有幾個遺漏值就移除
3.subset:設定檢查遺漏值的欄位
Q: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()
Q:Pandas如何切分資料?
相較於一次讀取大量的資料,我們可以將資料依需求或記憶體資源切分為多個區塊(chunk),最後再把處理好的各區塊(chunk)進行合併,如下範例:
#清理區塊中的遺漏值函式
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)
combined_chunk = pd.concat(chunk_list) #將各區塊的結果進行合併
如果想要學習更多的Python應用教學,歡迎前往Learn Code With Mike( https://www.learncodewithmike.com/2021/06/optimize-pandas-speed-and-memory.html )網站觀看更多精彩內容。
2 0 123 2