背景:我正在构建一个股票交易策略反馈者。我有2446个包含OHLCV数据的CSV。每个CSV是一个交易日的数据。在性能成为问题之后,我还将这些文件连接成大约140万行的单个CSV。稍后会详细介绍。
在开发的早期阶段,我使用pd.read_csv一次一个地读取每个文件,并将每个数据帧附加到列表中。然后我会在数据帧列表上运行模拟。使用这种技术,只需模拟本身需要约97秒。
all_days = []
for file in (os.listdir("C:/Users/XYZ/Desktop/EURUSD/CSV")):
all_days.append(pd.read_csv("C:/Users/XYZ/Desktop/EURUSD/CSV/"+file))
我希望整个程序运行得更快。所以我创建了一个CSV,并使用groupby来分隔每天的数据。果然,数据帧列表的创建速度要快得多。但是这里我被抛出一个循环:模拟速度明显放缓。模拟现在需要大约172秒,即使它仍然像以前一样接收数据帧列表。值得注意的是,模拟产生完全相同的结果。
df = pd.read_csv("C:/Users/XYZ/Desktop/EURUSD/Concatenated CSVs/EURUSD.csv",
index_col=0,parse_dates=True)
df['Time'] = pd.to_datetime(df['Time'])
all_days = []
for each in df.groupby(pd.Grouper(key='Time',freq='D')):
if each[1].empty is False:
all_days.append(each[1])
哪些因素可能导致性能下降如此之多?
为什么你会期望更快?
你不需要单独打开每个文件就可以节省一些开销,但是你最终仍然会将完全相同数量的数据读入内存。
在第二个例子中,你要求大熊猫通过扫描所有140万行数据来制作更小的数据帧!
尝试计算第二个示例构建数据帧所花费的时间,以及迭代花费多长时间。