标签:mem 表示 布尔 停止 lead article app blog omd
bcolz 在使用的时候对 pandas 有要求,版本最好是 0.22.0 版本
pip install -U bcolz
使用conda安装
conda install -c conda-forge bcolz
bcolz 包的存储分为 ctable 和 carray 两种存储类型,
cbytes 此对象的压缩大小(以子节为单位)
cparams 此对象的压缩参数
dtype 此对象的数据类型(numpy dtype)
names 对象的列名(列表)
nbytes 此对象的原始(未压缩)大小(以子节未单位)
ndim 此对象的维数
shape 这个物体的形状
size 这个对象的大小
addcol(newcol [,name,pos,move]) 添加一个新的newcol对象作为列。
append(COLS) 将cols附加到此ctable。
copy(** kwargs) 返回此ctable的副本。
delcol([姓名,pos,keep]) 删除名为name的列或位置pos。
eval(表达,** kwargs) 评估列上的表达式并返回结果。
fetchwhere(表达[,outcols,limit,...]) 获取满足表达式条件的行。
flush() 将内部缓冲区中的数据刷新到磁盘。
free_cachemem() 摆脱内部缓存以释放内存。
fromdataframe(** kwargs) 从pandas数据帧中返回一个ctable对象。
fromhdf5([的NodePath]) 从复合HDF5数据集(PyTables表)中返回ctable对象。
iter([开始,停止,步骤,outcols,限制,......]) 具有启动,停止和步进边界的迭代器。
resize(NITEMS) 调整实例大小以使其具有nitems。
todataframe([列,东方]) 从此对象返回一个pandas数据帧。
tohdf5(filepath [,nodepath,mode,cparams,...]) 将此对象写入HDF5文件。
trim(NITEMS) 从此实例中删除尾随的nitems。
where(表达式[,outcols,limit,skip,...]) 迭代表达式为true的行。
whereblocks(表达[,blen,outcols,...]) 迭代在此ctable上填充表达式条件的行,以大小为blen的块。
# addcol(newcol,name = None,pos = None,move = False,** kwargs ) 添加一个新的newcol对象作为列。
参数:
newcol:carray,ndarray,list或tuple
如果通过了carray,则不会进行转换。如果必须转换为carray,则应用kwargs。
name:string,optional
新列的名称。如果没有通过,它将收到一个自动名称。
pos:int,可选
列位置。如果没有通过,它将在最后附加。
move:布尔值,可选
如果新列是现有的,基于磁盘的carray它应该a)复制数据目录(False)或b)移动数据目录(True)
kwargs:参数列表或字典
carray构造函数支持的任何参数。
# append(cols ) 将cols附加到此ctable。
参数:
cols:标量值的列表/元组,NumPy数组或carray,它也可以是NumPy记录,NumPy重组或其他ctable。
# cbytes 此对象的压缩大小(以字节为单位)。
# copy(** kwargs ) 返回此ctable的副本。
参数:
kwargs:参数列表或字典
# carray / ctable构造函数支持的任何参数。
返回:
out:ctable对象,这个ctable的副本。
# cparams 此对象的压缩参数。
# delcol(name = None,pos = None,keep = False ) 删除名为name的列或位置pos。
参数:
name:string,optional,要删除的列的名称。
pos:int,可选,要删除的列的位置。
keep:布尔值
# flush()
将内部缓冲区中的数据刷新到磁盘。
通常应该在持久性模式下执行修改(__settitem __(),append())之后执行此调用。如果您不这样做,您可能会失去部分修改。
# free_cachemem()
摆脱内部缓存以释放内存。
通常可以在从carray / ctable读取之后进行该调用,以释放内部使用的存储器以缓存数据块/块。
# 静态fromdataframe(** kwargs ) 从pandas数据帧中返回一个ctable对象。
参数:
df:DataFrame
如果可能,‘object‘dtype将被转换为‘S‘字符串类型。这样可以更好地节省bcolz的存储空间。
将 .bcolz 文件读为 DataFrame
import bcolz
f = bcolz.open(‘/tmp/test.bcolz‘)
df = f.todataframe()
ct2 = bcolz.fromiter(
((i,i*i) for i in range(N)),
dtype="i4,f8",
count=N,
rootdir="./ct2.bcolz")
with bcolz.zeros(0, dtype="i4,f8", mode=‘w‘, rootdir="./ct1.bcolz") as ct1:
for i in range(20000):
ct1.append((i, i**2))
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)
ct4 = bcolz.ctable.fromdataframe(df, rootdir=‘./ct4.bcolz‘)
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 位浮点数(实数部分和虚数部分)
import time
import pandas as pd
import bcolz
import os
from concurrent.futures import ThreadPoolExecutor
p = ThreadPoolExecutor(5)
file_names = os.listdir(r‘/home/mfbar/rox_script/111111‘)
def clean(file_name):
start = time.time()
df = pd.read_csv(r‘/home/mfbar/rox_script/111111/%s‘%file_name)
ct = bcolz.ctable.fromdataframe(df, rootdir=r‘/home/mfbar/rox_script/clean/%s.bcolz‘%file_name[:-4])
ct.flush() # 格式化到本地,也可以直接写入到内存中
print(‘结束‘, file_name, time.time() - start)
if __name__ == ‘__main__‘:
l = []
for file_name in file_names:
t = p.submit(clean, file_name)
l.append(t)
import bcolz
import os
import time
file_names = os.listdir(r‘/home/mfbar/rox_script/clean‘)
s1 = time.time()
for file_name in file_names:
start = time.time()
ct = bcolz.open(rootdir=r‘/home/mfbar/rox_script/clean/%s‘%file_name)
df = ct.todataframe()
df = df.loc[(df.unixtime >= 1356969600) & (df.unixtime <= 1514736000)]
print(df.index)
print(‘结束‘, file_name, df.shape , time.time() - start)
print(‘使用bcolz处理完总共需要的时间‘, time.time() - s1)
博客参考地址:
http://bcolz.blosc.org/en/latest/intro.html
标签:mem 表示 布尔 停止 lead article app blog omd
原文地址:https://www.cnblogs.com/whkzm/p/13167687.html