問題背景
基於python將較大的文本文件讀取爲dataframe時(文本文件可能是csv或者xlsx類型)。直接用pandas對整個文件進行讀取的話,會比較耗時。
這裏提供一個簡單的加速方案:分批讀取。
實現方案
需要首先將文件轉爲可以分批讀取的數據類型:csv(’,‘分隔)或者tsv(’\t’分隔)。
然後基於 pandas 的 read_csv函數的 chunksize參數實現分批讀取(此參數用於設定每批讀入多少行數據)。一般設置爲一個稍大的整數即可明顯提速。
封裝成以下的函數,可以直接調用:
說明:此函數針對csv文件,如果文件不是基於逗號分隔,在read_csv函數中設置對應的sep參數(分隔符)。
def read_single_csv(input_path):
import pandas as pd
df_chunk=pd.read_csv(input_path,chunksize=1000)
res_chunk=[]
for chunk in df_chunk:
res_chunk.append(chunk)
res_df=pd.concat(res_chunk)
return res_df
以上方案在文件行數較大的情況下(數十萬行以上),親測提速明顯。