迭代在Pandas数据帧列表上的性能变化很大

时间:2017-12-29 00:43:10

标签: python pandas

背景:我正在建立一个股票交易策略反馈者。我有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])

哪些因素可能导致性能降低太多?

1 个答案:

答案 0 :(得分:1)

为什么你会期望更快?

您无需单独打开每个文件,从而节省了一些开销,但您最终仍在将完全相同数量的数据读入内存。

在第二个例子中,你要求大熊猫通过扫描所有140万行数据来制作一个较小的数据帧!

尝试计算第二个示例花费多长时间构建数据帧,以及花费多长时间迭代它。