我正在尝试使用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()