- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在 Pandas 中,有没有一种方法可以高效地以表格格式提取 HDFStore 中存在的所有 MultiIndex 索引?
我可以使用 where=
高效地 select()
,但我想要所有索引,而不需要任何列。我还可以使用 iterator=True
select()
来节省 RAM,但这仍然意味着要从磁盘读取几乎所有表,所以它仍然很慢。
我一直在 store.root..table.* 中寻找东西,希望我能得到一个索引值列表。我走在正确的轨道上吗?
B 计划是保留一个较短的 MultiIndex DataFrame,它只包含每次附加主 DataFrame 时附加的空 DataFrame。我可以检索它并获得比主要索引便宜得多的索引。虽然不优雅。
最佳答案
创建多索引df
In [35]: df = DataFrame(randn(100000,3),columns=list('ABC'))
In [36]: df['one'] = 'foo'
In [37]: df['two'] = 'bar'
In [38]: df.ix[50000:,'two'] = 'bah'
In [40]: mi = df.set_index(['one','two'])
In [41]: mi
Out[41]:
<class 'pandas.core.frame.DataFrame'>
MultiIndex: 100000 entries, (foo, bar) to (foo, bah)
Data columns (total 3 columns):
A 100000 non-null values
B 100000 non-null values
C 100000 non-null values
dtypes: float64(3)
存储为表格
In [42]: store = pd.HDFStore('test.h5',mode='w')
In [43]: store.append('df',mi)
get_storer
将返回存储的对象(但不检索数据)
In [44]: store.get_storer('df').levels
Out[44]: ['one', 'two']
In [2]: store
Out[2]:
<class 'pandas.io.pytables.HDFStore'>
File path: test.h5
/df frame_table (typ->appendable_multi,nrows->100000,ncols->5,indexers->[index],dc->[two,one])
索引级别创建为 data_columns,这意味着您可以在选择中使用它们这是只选择索引的方法
In [48]: store.select('df',columns=['one'])
Out[48]:
<class 'pandas.core.frame.DataFrame'>
MultiIndex: 100000 entries, (foo, bar) to (foo, bah)
Empty DataFrame
选择单个列并将其作为中间帧返回
In [49]: store.select('df',columns=['A'])
Out[49]:
<class 'pandas.core.frame.DataFrame'>
MultiIndex: 100000 entries, (foo, bar) to (foo, bah)
Data columns (total 1 columns):
A 100000 non-null values
dtypes: float64(1)
选择单个列作为系列(也可以是索引,因为它们存储为列)。这会非常快。
In [2]: store.select_column('df','one')
Out[2]:
0 foo
1 foo
2 foo
3 foo
4 foo
5 foo
6 foo
7 foo
8 foo
9 foo
10 foo
11 foo
12 foo
13 foo
14 foo
...
99985 foo
99986 foo
99987 foo
99988 foo
99989 foo
99990 foo
99991 foo
99992 foo
99993 foo
99994 foo
99995 foo
99996 foo
99997 foo
99998 foo
99999 foo
Length: 100000, dtype: object
如果你真的想要最快的只选择索引
In [4]: %timeit store.select_column('df','one')
100 loops, best of 3: 8.71 ms per loop
In [5]: %timeit store.select('df',columns=['one'])
10 loops, best of 3: 43 ms per loop
或者获取完整的索引
In [6]: def f():
...: level_1 = store.select_column('df','one')
...: level_2 = store.select_column('df','two')
...: return MultiIndex.from_arrays([ level_1, level_2 ])
...:
In [17]: %timeit f()
10 loops, best of 3: 28.1 ms per loop
如果您想要每个级别的值,这是一种非常快速的方法
In [2]: store.select_column('df','one').unique()
Out[2]: array(['foo'], dtype=object)
In [3]: store.select_column('df','two').unique()
Out[3]: array(['bar', 'bah'], dtype=object)
关于python - MultiIndex 数据帧的 Pandas HDFStore : how to efficiently get all indexes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17652182/
我将所有数据都放入了 HDFStore(是的!),但是如何从中取出数据.. 我在我的 HDFStore 中保存了 6 个数据帧作为 frame_table。这些表格中的每一个看起来如下所示,但长度各不
我确定这可能非常简单,但我无法弄清楚如何通过日期时间索引对 Pandas HDFStore 表进行切片以获得特定范围的行。 我有一个看起来像这样的表: mdstore = pd.HDFStore(st
我有一个 pandas HDFStore,我尝试从中进行选择。我想在一个大的 np.array 中选择两个时间戳之间的数据和一个 id。以下代码可以工作,但仅在查询列表中的成员身份时才会占用过多内存。
我对 pandas' HDFStore 有一些问题速度太慢了,不幸的是我无法从这里的其他问题中找到令人满意的解决方案。 情况 我有一个很大的 DataFrame,其中大部分包含 float ,有时包含
我对 pandas' HDFStore 有一些问题速度太慢了,不幸的是我无法从这里的其他问题中找到令人满意的解决方案。 情况 我有一个很大的 DataFrame,其中大部分包含 float ,有时包含
清楚我做错了什么吗? 我正在尝试 pandas HDFStore.select start 和 stop 选项,但没有什么区别。 我使用的命令是: import pandas as pd hdf =
我希望将我读入的两个表存储在数据框中。 我正在将 h5 文件读入我的代码中: with pd.HDFStore(directory_path) as store: self.df = stor
我在平面文件中有数 TB 的数据(在子集中),我想使用 Python Pandas/Pytables/H5py 将这些数据转换为 HDF5 以加快查询和搜索速度。我计划使用 to_hdf 之类的方法转
我有一个 pandas HDFStore,我试图从中进行选择。我想在一个大的 np.array 中选择两个带有 id 的时间戳之间的数据。以下代码有效,但仅在查询列表中的成员资格时占用过多内存。如果我
问题:如何创建一个允许对 pandas HDFStore 对象中的多个列进行迭代的生成器? 我正在尝试为 pandas HDFStore 对象创建一个包装类。我试图实现的功能之一是能够按给定的 blo
我在具有多索引的 HDFStore 中将frame_table 称为“数据”。在 DataFrame 中,它可能看起来像这样 var1 var2 va
以下代码片段: HDFStore = pandas.io.pytables.HDFStore lock = threading.RLock() with lock:
Pandas "Group By" Query on Large Data in HDFStore? 我已经尝试了答案中的示例,只是我希望能够按两列进行分组。 基本上,修改代码看起来像 with pd
我通过 Pandas 将大量数据帧导出到一系列 HDFStore 文件。我需要能够根据需要快速提取每个数据帧的最新记录。 设置: File path: /data/storage_X100.hdf
这很好用: cols = ['X', 'Y'] ind = [('A', 1), ('B', 2)] ind = pd.MultiIndex.from_tuples(index, names=['fo
假设我有一个 store = pd.HDFStore('cache/cache.h5') 我有一个存储的 DataFrame store['myDF'] 如果在我的代码中,我这样做: a = stor
我是 pytables 的新手,对存储压缩的 pandas DataFrame 有疑问。我当前的代码是: import pandas # HDF5 file name H5name="C:\\MyDi
我想知道为什么 HDFStore 会在 pandas 中的字符串列上发出警告。我认为它可能是我真实数据库中的 NaN,但在这里尝试它会给我两个列的警告,即使一个没有混合并且只是字符串。 使用 .13.
我正在试验不同的 pandas 友好存储方案来存储报价数据。迄今为止最快的(就读取和写入而言)是使用具有 blosc 压缩和“固定”格式的 HDFStore。 store = pd.HDFStore(
我有以下 DataFrame,它作为名为数据的 frame_table 存储在 HDFStore 对象中: shipmentid qty catid
我是一名优秀的程序员,十分优秀!