python - 对dict的操作无效
问题描述
我正在处理财务数据,以便建立一些波动性预测模型。我创建了一个名为indices
包含我的资产的字典。
我必须在字典中为每个资产的数据框添加一些列。在循环之后,尤其是使用indices[key]
and之后value
,我被卡住了。
indices = dict(AEX = df[df.Symbol==".AEX"],AORD = df[df.Symbol==".AORD"],BFX = df[df.Symbol==".BFX"])
ict_items([('AEX', Unnamed: 0 Symbol ... Rvol LogRvol
0 2000-01-03 00:00:00+00:00 .AEX ... 0.000580 -7.453228
1 2000-01-04 00:00:00+00:00 .AEX ... 5.646706 1.731072
2 2000-01-05 00:00:00+00:00 .AEX ... 0.014028 -4.266704
3 2000-01-06 00:00:00+00:00 .AEX ... 0.862001 -0.148499
4 2000-01-07 00:00:00+00:00 .AEX ... 3.128320 1.140496
5 2000-01-10 00:00:00+00:00 .AEX ... 0.129058 -2.047497
6 2000-01-11 00:00:00+00:00 .AEX ... 0.782647 -0.245074
7 2000-01-12 00:00:00+00:00 .AEX ... 0.271311 -1.304490
8 2000-01-13 00:00:00+00:00 .AEX ... 0.071858 -2.633065
9 2000-01-14 00:00:00+00:00 .AEX ... 0.727395 -0.318286
for key,value in indices.items():
indices[key] = value.reset_index(drop = True)
rv1 = np.full((len(value.index),1),0,dtype=float)
rv5 = np.full((len(value.index),1),0,dtype=float)
rv22 = np.full((len(value.index),1),0,dtype=float)
for j in list(range(22, len(value.index), 1)):
rv1[j] = value.iloc[j-1]['LogRvol']
rv5[j] = np.mean(value.iloc[j - 5:j]['LogRvol'])
rv22[j] = np.mean(value.iloc[j - 22:j]['LogRvol'])
indices[key] = pd.concat([value,pd.DataFrame(rv1),pd.DataFrame(rv5),pd.DataFrame(rv22)],axis=1)
indices[key] = value.iloc[22:]
indices[key] = value.reset_index(drop=True)
运行代码后,我期望更新的 dict 项目实际上不是。
这是预期和未达到的结果
indices = dict(AEX = df[df.Symbol==".AEX"],AORD = df[df.Symbol==".AORD"],BFX = df[df.Symbol==".BFX"])
ict_items([('AEX', Unnamed: 0 Symbol ... Rvol LogRvol rv1 rv5 rv22
0 2000-02-03 00:00:00+00:00 .AEX ... 0.000580 -7.453228
1 2000-02-04 00:00:00+00:00 .AEX ... 5.646706 1.731072 -7.453228
2 2000-02-05 00:00:00+00:00 .AEX ... 0.014028 -4.266704 1.731072
3 2000-02-06 00:00:00+00:00 .AEX ... 0.862001 -0.148499 -4.266704
4 2000-02-07 00:00:00+00:00 .AEX ... 3.128320 1.140496 -0.148499
5 2000-02-10 00:00:00+00:00 .AEX ... 0.129058 -2.047497 ..etc
6 2000-02-11 00:00:00+00:00 .AEX ... 0.782647 -0.245074
7 2000-02-12 00:00:00+00:00 .AEX ... 0.271311 -1.304490
8 2000-02-13 00:00:00+00:00 .AEX ... 0.071858 -2.633065
9 2000-02-14 00:00:00+00:00 .AEX ... 0.727395 -0.318286
解决方案
您示例中的 for 循环会覆盖indices[key]
4 次的值。
因此,您的代码相当于:
for key, value in indices.items():
indices[key] = value.reset_index(drop=True)
这显然不会改变 的值indices[key]
。
请注意,在这种情况下,更新您正在迭代的项目通常不是一个好主意indices
。
推荐阅读
- java - 在尝试使复合类方法对另一个包类可见时避免违反 SOLID 原则
- cassandra - 如何在没有分区键的情况下使用 ORDER_BY 搜索记录
- html - IE/Edge 不考虑绝对底部
- javascript - 有没有办法将事件监听器添加到类中?
- ios - UIAlertController 没有立即显示
- spring - 页面加载时的 Spring MVC 表单验证
- h2o - 可以为 h2o.save_model() 设置文件名(而不是简单地使用 model_id 值)?
- javascript - 谷歌地图标记没有显示 javascript
- node.js - Amazon Web Services 上的连接被拒绝
- c# - 了解为什么在 Bot Builder Framework 示例中似乎进行了 3 次翻译:MultiLingualBot