如何解决有没有更好的方法来提高连拍速度?
我是韩国的学生,正在使用python分析期权数据(财务)。 我正在寻找加快python代码性能的更好方法。
目标数据是期权的交易记录(每分钟),期限为2015年至2019年。 由于数据分为1227个文件(5年中的工作日数),因此我尝试将所有1227个文件连接起来,以最大程度地减少访问内存的次数。这是因为我将重复使用结果文件(连接文件=预处理文件),并且访问每个分离的文件都花费了太多时间。以下是我的代码的一部分。
#file_name is list type and it contains all names of the 1227 day files ordered by date
result_df = pd.DataFrame()
for f in file_name:
data_opt = pd.read_csv(location + f,header = None,sep = "\t")
#do something
#...
#...
oneday_df = pd.concat([minute_call,minute_put],axis = 0) #result of the processing one day data
result_df = pd.concat([result_df,oneday_df],axis = 0)
result_df.to_csv()
此代码有效,我可以获得正确的结果。但是,我可以看到速度随着时间的流逝而降低。这意味着我的代码在处理早期数据时工作速度很快,但是在处理晚期数据时速度下降。有什么更好的方法可以加快我的python代码的性能?
(对不起,我的英语不好,谢谢您阅读所有问题)
解决方法
而不是串联在内存中,而是保持打开的CSV文件打开,并在运行时将每个部分分别写入其中?
这样,您一次存储的数据将永远不会超过一天,从而不仅提高了速度,而且提高了内存消耗。
类似的东西:
with open('out_file.csv','w') as of:
for i,f in enumerate(file_name):
data_opt = pd.read_csv(location + f,header = None,sep = "\t")
#do something
#...
#...
oneday_df = pd.concat([minute_call,minute_put],axis = 0) #result of the processing one day data
is_first_part = (i == 0)
oneday_df.to_csv(of,header=is_first_part)
,
我认为与其在for循环内进行连接,不如将这些数据帧存储在list中,然后在for循环后进行连接。
类似的东西:
minute_something = []
for f in file_name:
data_opt = pd.read_csv(location + f,sep = "\t")
#do something
#...
#...
minute_something.append(minute_put)
minute_something.append(minute_call) #result of the processing one day data
result_df = pd.concat(munute_something,axis=0)
,
我安排了两种方法来将1000个csv文件与100行和10列组合在一起
- [19.50 s]在列表中收集数据帧并保存连接的数据帧
- [09.84 s]迭代地添加到csv文件
首先生成测试文件,并将文件名保存在列表中
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.rand(100,10))
for i in range(1000):
df.to_csv(f'../data/test/file{i:04d}.csv',index=False)
import glob
files = glob.glob('../data/test/file*.csv')
然后我对两种方法都进行了计时append
列出,concat
全部,to_csv
%%time
l = []
for file in files:
l.append(pd.read_csv(file))
pd.concat(l).to_csv('../data/test/concat_files.csv',index=False)
出局:
CPU times: user 4.7 s,sys: 547 ms,total: 5.25 s
Wall time: 19.5 s
append
模式下的csv文件
%%time
pd.read_csv(files[0])[:0].to_csv('../data/test/append_files.csv',index=False)
for file in files:
pd.read_csv(file).to_csv('../data/test/append_files.csv',mode='a',header=False,index=False)
出局:
CPU times: user 8.09 s,sys: 1.19 s,total: 9.28 s
Wall time: 9.84 s
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。