我正在尝试使用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方法,我将获得整套数据框,以用于进一步处理。

相反,一切正常,从该csv文件进行的读取操作几乎需要6分钟来创建数据帧。

我的问题是,是否有其他方法可以使用相同的模块和方法使此过程更快?

以下是作为csv文件呈现的示例数据

155487~!#-64721487465~!#A1_NUM~!#1.000155487~!#-45875722734~!#A32_ENG~!#This is a good facility458448~!#-14588001153~!#T12_Timing~!#23-02-2015 14:50:30458448~!#-10741214586~!#Q2_56!#

提前致谢

最佳答案

我认为您最好的选择是split the csv

split -l LINES_PER_FILE YOUR.CSV OUTPUT_NAMES


然后使用多重处理读取所有块。您有一个example here

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()

07-24 09:17