我使用Pandas read_csv()将更大的csv文件转换为HDF5格式。 当使用PyTables重新加载它以进行内核查询时,我看到数据结构已从字符串和4个浮点字段更改为
"index": Int64Col(shape=(), dflt=0, pos=0),
"values_block_0": Float64Col(shape=(4,), dflt=0.0, pos=1),
"DateTime": StringCol(itemsize=34, shape=(), dflt=b'', pos=2)
使用以下命令将csv文件加载到HDF5中
with pd.HDFStore(h5path, mode='w', complib='zlib', complevel=1) as store:
reader = pd.read_csv(csvpath,
chunksize=chunksize,
header=None,
skip_blank_lines=True,
error_bad_lines=False,
index_col=None,
names=['DateTime', 'A', 'B', 'AX', 'BX'])
for chunk in reader:
store.append('Quads', chunk, min_itemsize={'DateTime': 34}, expectedrows=6e7)
在PyTables中加载数据以进行进一步处理如下:
with pt.open_file(src_file, mode='r') as src:
table = src.root.Quads.table
从这里开始,table
我得到了如上所述的改变。
此聚合的副作用是数组不再遵循names=[]
列表的顺序,但现在按字母顺序排序。
args names
和index_col
都表示文档中的用户控制的字段排序。
Table.where()
子句不适用于多维域字段,这就是为什么我希望每个字段保持独立。
根据请求,csv文件的组织如下:
2015.01.01 22:01:31.779,1.21039,1.21062,0.75,0.75
2015.01.01 22:01:36.504,1.21041,1.21062,0.75,0.75
2015.01.01 22:01:36.581,1.21041,1.21064,1.50,1.50
2015.01.01 22:01:55.232,1.2105,1.21064,0.10,1.50
2015.01.01 22:01:56.927,1.2105,1.21063,0.10,0.75
从HDF Group的好男孩那里读取HDFView 2.11中生成的Pandas HDF5文件,显示聚集发生在Pandas创建的文件中,而不是PyTables如何读取数据。下面是H5文件的HDFViews属性输出:
table (3096, 2)
Compound/Vdata, 17918341
Number of attributes = 17
CLASS = TABLE
DateTime_dtype = bytes272
DateTime_kind = (lp0
VDateTime
p1
a.
DateTime_meta = N.
FIELD_0_FILL = 0
FIELD_0_NAME = index
FIELD_1_FILL = 0.0
FIELD_1_NAME = values_block_0
FIELD_2_FILL =
FIELD_2_NAME = DateTime
NROWS = 17918341
TITLE =
VERSION = 2.7
index_kind = integer
values_block_0_dtype = float64
values_block_0_kind = (lp0
VA
p1
aVAX
p2
aVB
p3
aVBX
p4
a.
values_block_0_meta = N.
注意values_block_0
如何在Pandas输出中出现,但尚未在read_csv()
中添加为名称