簡體   English   中英

在 python pandas 中加速 read_csv

[英]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 這很簡單,只需更改最上面的導入,其他一切都會自動完成。

看一下頁面: https://github.com/modin-project/modin

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM