python itemsize_Pandas pytable:如何指定多索引元素的min_itemsize

{1>需要为这个集合指定一个多级别的名称。下面是一个例子:

创建2个多索引帧In [1]: df1 = DataFrame(np.random.randn(4,2),index=MultiIndex.from_product([['abcdefghijklm','foo'],[1,2]],names=['string','number']))

In [2]: df2 = DataFrame(np.random.randn(4,2),index=MultiIndex.from_product([['abcdefghijklmop','foo'],[1,2]],names=['string','number']))

In [3]: df1

Out[3]:

0 1

string number

abcdefghijklm 1 0.737976 0.840718

2 0.605763 1.797398

foo 1 1.589278 0.104186

2 0.029387 1.417195

[4 rows x 2 columns]

In [4]: df2

Out[4]:

0 1

string number

abcdefghijklmop 1 0.539507 -1.059085

2 1.263722 -1.773187

foo 1 1.625073 0.078650

2 -0.030827 -1.691805

[4 rows x 2 columns]

创建商店

^{pr2}$

这是计算长度的In [12]: store.get_storer('df1').table

Out[12]:

/df1/table (Table(4,)) ''

description := {

"index": Int64Col(shape=(), dflt=0, pos=0),

"values_block_0": Float64Col(shape=(2,), dflt=0.0, pos=1),

"number": Int64Col(shape=(), dflt=0, pos=2),

"string": StringCol(itemsize=13, shape=(), dflt='', pos=3)}

byteorder := 'little'

chunkshape := (1456,)

autoindex := True

colindexes := {

"index": Index(6, medium, shuffle, zlib(1)).is_csi=False,

"number": Index(6, medium, shuffle, zlib(1)).is_csi=False,

"string": Index(6, medium, shuffle, zlib(1)).is_csi=False}

这是你现在得到的错误In [13]: store.append('df1',df2)

ValueError: Trying to store a string with len [15] in [string] column but

this column has a limit of [13]!

Consider using min_itemsize to preset the sizes on these columns

用级别的名称指定min_itemsizeIn [14]: store.append('df',df1,min_itemsize={ 'string' : 15 })

In [15]: store.get_storer('df').table

Out[15]:

/df/table (Table(4,)) ''

description := {

"index": Int64Col(shape=(), dflt=0, pos=0),

"values_block_0": Float64Col(shape=(2,), dflt=0.0, pos=1),

"number": Int64Col(shape=(), dflt=0, pos=2),

"string": StringCol(itemsize=15, shape=(), dflt='', pos=3)}

byteorder := 'little'

chunkshape := (1394,)

autoindex := True

colindexes := {

"index": Index(6, medium, shuffle, zlib(1)).is_csi=False,

"number": Index(6, medium, shuffle, zlib(1)).is_csi=False,

"string": Index(6, medium, shuffle, zlib(1)).is_csi=False}

追加In [16]: store.append('df',df2)

In [19]: store.df

Out[19]:

0 1

string number

abcdefghijklm 1 0.737976 0.840718

2 0.605763 1.797398

foo 1 1.589278 0.104186

2 0.029387 1.417195

abcdefghijklmop 1 0.539507 -1.059085

2 1.263722 -1.773187

foo 1 1.625073 0.078650

2 -0.030827 -1.691805

[8 rows x 2 columns]

In [20]: store.close()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值