2

让我们首先构造一个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)

谢谢你的时间!

4

1 回答 1

2

您可以像这样在 Blaze 中使用 transform 方法:

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

例如,您可以使用地图:

from datetime import datetime
yourexpr = df.col1.map(datetime.utcfromtimestamp)
bz.transform(df, sepal_ratio=yourexpr)
于 2016-12-09T12:45:12.797 回答