【发布时间】:2020-05-18 20:12:34
【问题描述】:
我有一个大约 200 万行(每行 80 列)的 pandas 数据框。
我想将数据框输出到 csv 以及 parquet 文件。
假设数据框存在于df 变量中
初步方法:
print('Creating csv and parquet files')
st = time.time()
df.to_csv('output_file.csv')
df.to_parquet('output_file.parquet')
print(f'Created csv and parquet files in {time.time() - st} seconds')
使用这种方法写入文件花费的时间太长。 我假设由于这两个是独立的操作,我可以利用多个进程。
新方法:
def build_csv(dataframe, output_filename):
print(f'Building csv: {output_filename}')
dataframe.to_csv(output_filename)
def build_parquet(dataframe, output_filename):
print(f'Building parquet: {output_filename}')
dataframe.to_parquet(output_filename)
with ProcessPoolExecutor(max_workers=3) as executor:
executor.submit(build_csv, (df, 'output_file.csv'))
executor.submit(build_parquet, (df, 'output_file.parquet'))
较新的方法运行成功,但我没有看到正在创建任何文件。我不确定为什么会这样。
有没有更好(更快)的方法将 pandas 数据帧写入不同的文件?
【问题讨论】:
-
猜测:子进程可能有不同的当前工作目录。使用要写入的文件名的绝对路径。
-
这似乎是使用Dask 的问题。
标签: python pandas python-multiprocessing parquet