gpt4 book ai didi

python - 在循环中向 pandas 数据帧添加滚动平均值需要很长时间

转载 作者:太空宇宙 更新时间:2023-11-03 15:45:36 25 4
gpt4 key购买 nike

我有一个相当大的 pandas 数据帧字典。键是股票代码,每个数据框有 14 列,包含股票市场数据。例如:

eodscreen['AAPL']
Out[35]:
date open high low close volume ex-dividend \
date
2010-01-04 2010-01-04 5.82 5.980 5.8000 5.98 685500.0 0.0
2010-01-05 2010-01-05 5.99 6.000 5.8300 5.93 419500.0 0.0
...
...

我正在尝试为每只股票添加一个名为“MA”的列,其中包含“收盘价”列的移动平均线。

这是我的简单循环:

for k in eodscreen:
eodscreen[k]['MA'] = eodscreen[k]['close'].rolling(window=5).mean()

运行此代码大约需要 3 分钟(在几年前的笔记本电脑上,i7,16GB RAM...)。

我收到以下警告,也许它解释了部分问题?

> A value is trying to be set on a copy of a slice from a DataFrame. Try
> using .loc[row_indexer,col_indexer] = value instead

我对什么是“大”字典没有很好的感觉,所以也许这很正常?

Dictionary: 1600 keys each containing a dataframe.

Each dataframe: 1 date column, 13 float64 columns, 1740 rows per column.

如果这是预期的,您能否提供有关如何在程序中加载和访问此类数据的见解?它全部存储在大约 400MB 的 csv 文件中,我在程序开始时加载所有内容,并在字典中组织所有内容。最好只读取 1 个股票代码的数据,执行我想要的任何数学运算,重写文件等等,或者我在正确的轨道上认为我可以从内存中完成这一切(更容易)!

非常感谢任何评论/见解!

非常感谢!

最佳答案

您正在尝试分配恰好是另一个数据帧的 View 的切片的切片。发生这种情况是因为您最初创建字典的方式。

解决方法:

for k in eodscreen:
eodscreen[k] = eodscreen[k].assign(MA=df['close'].rolling(window=5).mean())

我建议这应该有效的原因是您正在将带有新列的数据帧副本重新分配给字典键。

关于python - 在循环中向 pandas 数据帧添加滚动平均值需要很长时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41786171/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com