【问题标题】:Append multiindex dataframe in HDF在 HDF 中附加多索引数据帧
【发布时间】:2020-06-19 23:28:51
【问题描述】:

以日终股票数据为例:

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。

  1. 不要更改 DataFrame 并使用 df.to_hdf() 保存以区分 按日期命名的组。
  2. 将不同的股票拆分为系列并按名称构建表格,或者更好地通过带有属性“名称”的“代码”构建表格
  3. 仅在一组中附加多索引 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')

表格被替换而不是展开。怎么了?

【问题讨论】:

    标签: python pandas hdf5


    【解决方案1】:

    我的主要问题的答案很简单:

    在这里找到它: 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 文件。然后我查询这两个表并用 pandas 做进一步的分析。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-18
      • 1970-01-01
      • 2021-01-28
      • 2023-03-25
      • 2021-09-26
      • 2021-01-12
      • 1970-01-01
      • 2020-03-13
      相关资源
      最近更新 更多