让我们首先构造一个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中使用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) )
它将计算列添加到数据框。
Doc在这里:
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/