高效地将大熊猫数据写入不同的文件

yashtodi94

我有一个大约200万行的熊猫数据框(每个80列)。

我想将数据帧输出到csv以及一个实木复合地板文件中。

假设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数据帧写入不同的文件?

丹尼尔

编辑:我将线程解决方案保留在下面,以供您参考。但是,此解决方案应解决Python GIL问题。我已经对其进行了测试,可以看到文件已成功写入:

from multiprocessing import Pool
import pandas as pd

# original data:
data = pd.DataFrame([
    [ 1, 2, 3, 4,], 
    [ 1, 2, 3, 4,], 
    [ 1, 2, 3, 4,], 
    [ 1, 2, 3, 4,], 
    [ 1, 2, 3, 4,],
])    


def SaveDataToCsv(data):
    print('Started export to .csv')
    data.to_csv('data.csv')
    print('Finished export to .csv')


def SaveDataToParquet(data):
    print('Started export to .parquet')
    data.to_parquet('data.parquet')
    print('Finished export to .parquet')


# multiprocessing method:
pool = Pool(processes=2)
process1 = pool.apply_async(SaveDataToCsv, [data])
process2 = pool.apply_async(SaveDataToParquet, [data])

测试了threading库,看起来工作正常:

import pandas as pd
import threading

# original data:
data = pd.DataFrame([
    [ 1, 2, 3, 4,],
    [ 1, 2, 3, 4,],
    [ 1, 2, 3, 4,],
    [ 1, 2, 3, 4,],
    [ 1, 2, 3, 4,],
])


def SaveDataToCsv(data):        
    data.to_csv('data.csv')


def SaveDataToParquet(data):
    data.to_parquet('data.parquet')    

thread1 = threading.Thread(target=SaveDataToCsv, args=(data,))
thread2 = threading.Thread(target=SaveDataToParquet, args=(data,))

thread1.start()
thread2.start()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将大熊猫数据帧分块写入CSV文件

来自分类Dev

将大熊猫中的CSV文件导入大熊猫数据框

来自分类Dev

通过追加不同大小的列将多个csv文件读取到大熊猫数据框中

来自分类Dev

将大熊猫数据帧写入SQL Server数据库

来自分类Dev

高效转换大熊猫DataFrame

来自分类Dev

将两个数据框与大熊猫合并后的行数不同

来自分类Dev

将两个数据框与大熊猫合并后的行数不同

来自分类Dev

大熊猫数据框中的不同连续块

来自分类Dev

高效地将BytesIO对象写入文件

来自分类Dev

将JSON文件装入大熊猫数据框时出错

来自分类Dev

大熊猫:从JSON文件检索嵌套数据

来自分类Dev

大熊猫:从JSON文件检索嵌套数据

来自分类Dev

大熊猫:将CSV系列转换为数据框

来自分类Dev

大熊猫:将CSV系列转换为数据框

来自分类Dev

与Matplotlib不同的大熊猫中的散点图

来自分类Dev

高效计算大熊猫的滚动时间差

来自分类Dev

大熊猫,使用pd.to_hdf将多个数据集存储在h5文件中

来自分类Dev

大熊猫,使用pd.to_hdf将多个数据集存储在h5文件中

来自分类Dev

如何将大熊猫系列以行而不是列的形式写入CSV?

来自分类Dev

大熊猫:比较来自两个不同大小的不同数据帧的字符串列

来自分类Dev

透视大熊猫中的数据

来自分类常见问题

分割大熊猫数据框

来自分类Dev

从长到宽的数据。大熊猫

来自分类Dev

计算大熊猫数据框的元组

来自分类Dev

处理大熊猫的月度合并数据

来自分类Dev

规范大熊猫中的长数据

来自分类Dev

大熊猫数据框并行处理

来自分类Dev

透视大熊猫数据并添加列

来自分类Dev

多指标大熊猫从数据帧