1. 读取
将 .bcolz
文件读为 DataFrame
import bcolz
f = bcolz.open('/tmp/test.bcolz')
df = f.todataframe()
2. 写入
- 方法一:
bcolz.fromiter
ct2 = bcolz.fromiter(
((i,i*i) for i in range(N)),
dtype="i4,f8",
count=N,
rootdir="./ct2.bcolz")
- 方法二:
ctable.append
with bcolz.zeros(0, dtype="i4,f8", mode='w', rootdir="./ct1.bcolz") as ct1:
for i in range(20000):
ct1.append((i, i**2))
- 方法三:
ctable.addcol
with bcolz.zeros(0, dtype="i4,f8", mode='w', rootdir="./ct3.bcolz") as ct3:
new_col = np.linspace(0, 1, N)
ct3.addcol(new_col)
- 方法四:
ctable.fromdataframe
ct4 = bcolz.ctable.fromdataframe(df, rootdir='./ct4.bcolz')
3. 查询
- 方法一
ct = bcolz.open('./ct.bcolz')
df = ct.todataframe()
df = df.loc[(df.date>20160101)&(df.date<=20160201)]
- 方法二
ct = bcolz.open('./ct.bcolz')
ct = ct.where('(date>20160101)&(date<=20160201)')
df = pd.DataFrame(ct
附:
bcolz 中的 dtype
的写法与 numpy 一样
类型 简写 描述
bool_ 'b' 布尔型数据类型(True 或者 False)
int_ 'i8' 默认的整数类型(int32 或 int64)
intc 'i4/i8' 一般是 int32 或 int 64
intp 'i4/i8' 用于索引的整数类型(一般情是 int32 或 int64)
int8 'i1' 字节(-128 to 127)
int16 'i2' 整数(-32768 to 32767)
int32 'i4' 整数(-2147483648 to 2147483647)
int64 'i8' 整数(-9223372036854775808 to 9223372036854775807)
uint8 'u1' 无符号整数(0 to 255)
uint16 'u2' 无符号整数(0 to 65535)
uint32 'u4' 无符号整数(0 to 4294967295)
uint64 'u8' 无符号整数(0 to 18446744073709551615)
float_ 'f8' float64 类型的简写
float16 'f2' 半精度浮点数,包括:1 个符号位,5 个指数位,10 个尾数位
float32 'f4' 单精度浮点数,包括:1 个符号位,8 个指数位,23 个尾数位
float64 'f8' 双精度浮点数,包括:1 个符号位,11 个指数位,52 个尾数位
complex_ 'c16' complex128 类型的简写,即 128 位复数
complex64 'c8' 复数,表示双 32 位浮点数(实数部分和虚数部分)
complex128 'c16' 复数,表示双 64 位浮点数(实数部分和虚数部分)