我有数据扩充代码,需要附加到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))
此代码仅提供了正在发生的情况的概览。
答案 0 :(得分:0)
使用简单的熊猫只会利用CPU的单个内核进行计算。
解决方案:
您可以将 multiprocessing 与熊猫结合使用,以加快此附加计算的速度。使用多处理,您将能够减少处理时间,具体取决于CPU的内核数。机器的核心数越多,处理时间越短。
可以从以下链接中引用使用熊猫进行多处理的示例实现:http://datumorphism.com/til/programming/pandas/pandas-parallel-multiprocessing/
有关更多详细说明,请参阅: https://towardsdatascience.com/make-your-own-super-pandas-using-multiproc-1c04f41944a1