Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python csv和熊猫的更快替代方案_Python_Pandas_Hdf5 - Fatal编程技术网

Python csv和熊猫的更快替代方案

Python csv和熊猫的更快替代方案,python,pandas,hdf5,Python,Pandas,Hdf5,我有需要附加到csv文件的数据扩充代码。数据以百万计。需要2-3天。有没有更快的替代方案?HDF5在需要数百万次追加操作的情况下有多快 编辑:代码:仅供参考 def insert_data(directory, annotated_csv, output_csv): data = pd.read_csv(annotated_csv) data.to_csv(output_csv,index = False) counter = 0 print("number of

我有需要附加到csv文件的数据扩充代码。数据以百万计。需要2-3天。有没有更快的替代方案?HDF5在需要数百万次追加操作的情况下有多快

编辑:代码:仅供参考

def insert_data(directory, annotated_csv, output_csv):
    data = pd.read_csv(annotated_csv)
    data.to_csv(output_csv,index = False)
    counter = 0
    print("number of files: ", len(os.listdir(directory)))

    datachunk = []

    for fname in glob.glob(directory + '/*jpg'):



        fname = fname.split('/')[-1]

        counter = counter + 1

        if counter % 10000 == 0:
            df_tmp = pd.DataFrame(data=datachunk, columns=data.columns)

            df_tmp.to_csv(output_csv,mode = 'a', index = False, header=False)

            datachunk = []

            print("counter: "+ str(counter))


        try:    
            ofile = fname.split("-")[0]
            flabel = "'" + fname.split("-")[3] + "'"

            ofile = ofile +'.jpg'

            BB, MB, SB = get_all_bb(data, ofile)

            BB[0] = fname
            MB[0] = fname
            SB[0] = fname

            BB[7] = flabel
            MB[7] = flabel
            SB[7] = flabel

            datachunk.append(BB)
            datachunk.append(MB)
            datachunk.append(SB)

        except:
            print("Exception on"+ str(fname))
            pass

    df_tmp = pd.DataFrame(data=datachunk, columns=data.columns)       
    df_tmp.to_csv(output_csv,mode = 'a', index = False, header=False)
    print("counter: "+ str(counter))

这段代码只是对正在发生的事情的一瞥

使用simple pandas将只使用CPU的一个内核进行计算

解决方案:

您可以将多处理与pandas结合使用,以加速此附加计算。使用多处理,您将能够根据CPU的内核数量减少处理时间。机器的内核数越高,处理时间越短

使用pandas的多处理的示例实现可从以下链接中参考:

有关更详细的说明,请参阅:

它在数据库中不起作用吗?@sammywemmy不,它不能。请分享你的代码。你分析过你的代码了吗?看看慢的部分是什么?(我假设
get_all_bb
?)这看起来令人尴尬地平行(只需将for循环放入
多处理
中,并从处理函数返回
bb、MB、SB
三元组)。此外,与panda不同,尝试将
pickle
d对象附加到一个或多个文件中即可。然后,您可以在空闲时将其后置处理为CSV或其他格式。