[英]Speeding up read_csv in python pandas
我正在嘗試使用 Pandas 'read_csv' 方法解析一個巨大的 csv 文件(大約 5000 萬行)。
下面是我正在使用的代碼片段:
df_chunk = pd.read_csv(db_export_file, delimiter='~,#', engine='python', header=None, keep_default_na=False, na_values=[''], chunksize=10 ** 6, iterator=True)
在使用pd.concat
方法之后,我得到了整套 dataframe 用於進一步處理。
相反,一切正常,從 csv 文件讀取操作需要將近 6 分鍾才能創建 dataframe。
我的問題是,有沒有其他方法可以使用相同的模塊和方法來加快此過程?
以下是顯示為 csv 文件的示例數據
155487~.#-64721487465~:#A1_NUM~:#1.000 155487~!#-45875722734~!#A32_ENG~!#This is a good facility 458448~!#-14588001153~!#T12_Timing~!#23-02-2015 14:50:30 458448~!#-10741214586~!#Q2_56!#
提前致謝
我認為您最好的選擇是拆分csv
split -l LINES_PER_FILE YOUR.CSV OUTPUT_NAMES
import os
import pandas as pd
from multiprocessing import Pool
# wrap your csv importer in a function that can be mapped
def read_csv(filename):
'converts a filename to a pandas dataframe'
return pd.read_csv(filename)
def main():
# set up your pool
pool = Pool(processes=8) # or whatever your hardware can support
# get a list of file names
files = os.listdir('.')
file_list = [filename for filename in files if filename.split('.')[1]=='csv']
# have your pool map the file names to dataframes
df_list = pool.map(read_csv, file_list)
# reduce the list of dataframes to a single dataframe
combined_df = pd.concat(df_list, ignore_index=True)
if __name__ == '__main__':
main()
我的案例以及它是如何解決的
我有一個類似的龐大數據集,並且必須實施自定義轉換器。 由於自定義轉換器, pandas.read_csv()
花費了很長時間。
我的解決方案是使用modin
。 這很簡單,只需更改最上面的導入,其他一切都會自動完成。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.