当前位置: 首页 > 面试题库 >

Python(Pandas):将数据框存储在具有多索引的hdf5中

钦景胜
2023-03-14
问题内容

我需要使用具有多个索引的大型数据框,因此我尝试创建一个数据框以了解如何将其存储在hdf5文件中。数据框是这样的:(在前2列中有multi索引)

Symbol    Date          0

C         2014-07-21    4792
B         2014-07-21    4492
A         2014-07-21    5681
B         2014-07-21    8310
A         2014-07-21    1197
C         2014-07-21    4722
          2014-07-21    7695
          2014-07-21    1774

我正在使用pandas.to_hdf,但在尝试选择组中的数据时会创建“固定格式存储”:

store.select('table','Symbol == "A"')

它返回一些错误,主要问题是

TypeError: cannot pass a where specification when reading from a Fixed format store. this store must be selected in its entirety

然后我试图像这样追加DataFrame:

store.append('ts1',timedata)

那应该创建一个表,但这给了我另一个错误:

TypeError: [unicode] is not implemented as a table column

所以我需要的代码将数据帧存储在一个表中HDF5格式并选择从单一索引的DATAS(为此目的,我发现这个代码:store.select('timedata','Symbol == "A"')


问题答案:

这是一个例子

In [8]: pd.__version__
Out[8]: '0.14.1'

In [9]: np.__version__
Out[9]: '1.8.1'

In [10]: import sys

In [11]: sys.version
Out[11]: '2.7.3 (default, Jan  7 2013, 09:17:50) \n[GCC 4.4.5]'

In [4]: df = DataFrame(np.arange(9).reshape(9,-1),index=pd.MultiIndex.from_product([list('abc'),date_range('20140721',periods=3)],names=['symbol','date']),columns=['value'])

In [5]: df
Out[5]: 
                   value
symbol date             
a      2014-07-21      0
       2014-07-22      1
       2014-07-23      2
b      2014-07-21      3
       2014-07-22      4
       2014-07-23      5
c      2014-07-21      6
       2014-07-22      7
       2014-07-23      8

In [6]: df.to_hdf('test.h5','df',mode='w',format='table')

In [7]: pd.read_hdf('test.h5','df',where='date=20140722')
Out[7]: 
                   value
symbol date             
a      2014-07-22      1
b      2014-07-22      4
c      2014-07-22      7

In [12]: pd.read_hdf('test.h5','df',where='symbol="a"')
Out[12]: 
                   value
symbol date             
a      2014-07-21      0
       2014-07-22      1
       2014-07-23      2


 类似资料:
  • 基于单个值/标签的切片 基于一个或多个级别的多个标签的切片 布尔条件和表达式的过滤 哪些方法适用于什么情况 为简单起见的假设: 输入数据表没有重复的索引键 下面的输入数据只有两个级别。(此处所示的大多数解决方案都概括为N个级别) 问题2b 我如何获得级别“二”中对应于“t”和“w”的所有值? 如何从检索横截面,即具有索引特定值的单行?具体来说,如何检索的横截面,由 如何选择与和相对应的两行?

  • 问题内容: 用更多索引范围(例如by和)对数据帧进行切片的pythonic方法是什么? 我想要一个更优雅的方式: 结果: 像这样的东西会更优雅: 问题答案: 您可以使用numpy的“切片技巧”: 给出:

  • 问题内容: 这似乎很明显,但是我似乎无法弄清楚如何将数据帧的索引转换为列? 例如: 至, 问题答案: 要么: 或: 因此,如果你有一个3级索引的多索引框架,例如: 并且要将索引中的第1级()和第3级()转换为列,你可以执行以下操作:

  • 问题内容: 我敢肯定有一种明显的方法可以做到这一点,但现在还不能想到任何光滑的东西。 基本上不是引发异常,而是要获取或查看pandas索引中是否存在值。 我现在工作的是以下内容 问题答案: 这应该可以解决问题

  • 问题内容: 摘要:这不起作用: 但是这样做: 为什么? 再生产: 这不起作用: 但是这样做: 链接到笔记本 我的问题是: 为什么只有第二种方式起作用?我似乎看不到选择/索引逻辑的差异。 版本是0.10.0 编辑:这不应该再这样了。从0.11版开始,提供。参见此处:http : //pandas.pydata.org/pandas- docs/stable/indexing.html 问题答案: 大

  • 问题内容: 假设我有以下数据框: 我想创建一个MultiIndex,它将包含每个lvl的总和。输出将如下所示: 目前,我正在使用循环在每个级别上创建三个不同的数据框,然后在excel上对其进行操作,如下所示。因此,如果可能的话,我想在python中进行此计算。 提前谢谢了。 问题答案: 一些自由使用 我可以完全按照您的要求 至于如何!我将其留给读者练习。