[Python] 讀/寫/查詢 .bcolz 文件

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 位浮點數(實數部分和虛數部分)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章