python - 使用 Blaze 附加 bcolz 列

标签 python hdf5 blaze

我们首先构建一个ctable:

import pandas as pd
import blaze as bl

df = pd.DataFrame({'x': range(4), 'y': [2., 4., 2., 4.]})
bl.odo(df, 'test.bcolz')

现在假设我想向该表添加一个名为“x_mod”的列。我试过了

test_table = bl.Data('test.bcolz')

def f(h):
    return h*3
test_table['x_mod'] = test_table['x'].apply(f, dshape='int64')
#Or, I think equivalently:
#test_table['x_mod'] = test_table['x']*3

但是它给出了

TypeError: 'InteractiveSymbol' object does not support item assignment

1) 如何分配“x_mod”列然后保存到磁盘? 我正在处理大型数据库:计算内存中的列应该没问题,但我无法将整个 ctable 加载到内存中。

2)在相关问题上,apply对我也不起作用。我做错了什么吗?

#This doesn't work:
bl.compute(test_table['x'].apply(f, dshape='int64'))

#This I think should be equivalent, but does work:
bl.compute(test_table['x']*3)

感谢您的宝贵时间!

最佳答案

您可以像这样使用 Blaze 中的转换方法:

bz.transform(df, sepal_ratio = df.sepal_length / df.sepal_width   )

对于其他功能,需要使用Blaze表达式:

bz.transform(df, sepal_ratio = BLAZE_symbolic_Expression(df.Col1, df.col2)  )

它将把计算列添加到数据框中。 文档在这里: https://blaze.readthedocs.io/en/latest/expressions.html

例如,您可以使用 map :

from datetime import datetime
yourexpr = df.col1.map(datetime.utcfromtimestamp)
bz.transform(df, sepal_ratio=yourexpr)

关于python - 使用 Blaze 附加 bcolz 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31547384/

相关文章:

python - 大型数据集的 TFIDF

python - PyTables,在不打开 hdf5 文件的情况下创建表

hdf5 - 关于 NetCDF 与 HDF5 存储科学数据的看法?

python - 从 Pyramid Web 应用程序配置 Blaze 并启动 Bokeh 服务器

python blaze计算多列的平均值

python - 如何在 Python 中发出信号?

python - “无法访问 'sort_values' 对象的可调用属性 'DataFrameGroupBy',请尝试使用 'apply' 方法”

嵌套字典和列表的 Pythonic 替代品

python - HDF5:有没有办法重命名现有 HDF5 表中的列名称?