python - 在 HDF 中附加多索引数据帧
问题描述
以日终股票数据为例:
In [36]: df
Out[36]:
Code Name High Low Close Volume Change Change.2
0 AAAU Perth Mint Physical Gold ETF 16.8500 16.3900 16.6900 311400 0.0000 0.02
1 AADR Advisorshares Dorsey Wright ADR 49.8400 49.2300 49.6100 18500 -1.3000 2.54
2 AAMC Altisource Asset 24.0000 20.0000 23.9400 2500 0.3600 1.53
3 AAU Almaden Minerals 0.3987 0.3650 0.3684 355100 -0.0147 3.84
4 ABEQ Absolute Core Strategy ETF 23.2100 22.8200 23.1100 114700 -0.1900 0.82
... ... ... ... ... ... ... ... ...
26643 ZVLO Esoft Inc 0.0600 0.0600 0.0600 1000 0.0100 20
26644 ZVTK Zevotek Inc 0.0313 0.0209 0.0302 44900 0.0102 51
26645 ZXAIY China Zenix Auto International 0.1534 0.1534 0.1534 200 -0.1566 50.52
26646 ZYRX Zyrox Mining Intl Inc 0.0200 0.0181 0.0200 3000 0.0000 0
26647 ZZZOF Zinc One Resources Inc 0.0111 0.0111 0.0111 300 0.0000 0
附加问题:
有一些不同的方法可以将此类数据存储到 HDF5。
- 不要更改 DataFrame 并使用 df.to_hdf() 将其保存到按日期命名的不同组中。
- 将不同的股票拆分为系列并按名称构建表格,或者通过带有属性“名称”的“代码”更好地构建表格
- 仅在一组中附加一个多索引 DataFrame。
我想在数据访问和分析的情况下,第三种解决方案将是最快和最灵活的。但是使用第二种解决方案似乎更容易为每家公司添加新信息,如基本面。有没有更好的折衷方案,我还不知道?
主要问题(第三种方式):
我使用此代码在每个新的一天附加分层数据框:
df = pd.concat(lod, ignore_index=True)
# remove not useful dataj
df = df.drop(['Change.1', 'Change.2', 'Unnamed: 9'], axis=1)
df = df.dropna()
# append a Date column
df['Date'] = dt.datetime.today().date() - dt.timedelta(days=1)
# create multiindex
df = df.set_index(['Date', 'Code', 'Name'])
# append the data to hdf5 container
df.to_hdf(wkd + 'Database.h5', key='stocks', mode='a', format='table')
该表被替换而不是扩展。怎么了?
解决方案
我的主要问题的答案很简单:
在这里喜欢它: https ://github.com/pandas-dev/pandas/issues/4584
只需添加 'append = True'
df.to_hdf(wkd + 'Database.h5', key='stocks', mode='a', format='table', append = True)
编辑:我目前对附加问题的回答是:
我认为可以使用第三种方式,因为使用磁盘上的 pandas HDFStore 对象很容易查询多索引数据帧:
store.select('stocks', "Code=BMWYY")
要添加新数据(如公司基础知识),我只需向 HDF 文件添加一个新表对象。然后我查询这两个表并用熊猫做进一步的分析。
推荐阅读
- javascript - “[]”在此代码段中如何工作?这是 ES6 的特性吗?
- mysql - 这是我对季度报告的查询,但没有出现所有季度,只出现 1 列
- angular - (更改)角度不在第一个元素角度 6 之后
- hive - 在 Hive 操作中运行 Hive 查询与在 Oozie 中运行 Beeline
- tensorflow - 找到卷积层和密集层的数量
- javascript - 手动设置 Panopto 的速度
- r - 如何用 2 个变量绘制直方图
- python - 在 input() 提示中打印列表的元素,没有 .join 并将列表转换为 str
- javascript - JavaScript:切换按钮禁用属性
- r - 在r中的单元格内强制冒号运算符或从字符到向量的破折号