如何强制Pandas read_csv()不将具有相同数据类型的行堆叠到数组中?

时间:2015-10-04 16:45:13

标签: python pandas pytables

我使用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 namesindex_col都表示文档中的用户控制的字段排序。

PyTables中的

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()中添加为名称

0 个答案:

没有答案