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 位浮點數(實數部分和虛數部分)