【发布时间】:2016-02-04 23:22:22
【问题描述】:
我最近开始将我的数据探索代码集从 pandas 移动到 blaze。我遇到了以下问题。
假设:
from blaze import *
s = Data([(1, 'Alice', 100),
... (2, 'Bob', -200),
... (3, 'Charlie', 300),
... (4, 'Denis', 400),
... (5, 'Edith', -500)],
... fields=['id', 'name', 'balance'])
我们可以通过into 使用pandas.DataFrame 轻松计算如下内容:
into(pd.DataFrame,s).balance.apply(abs)
但是,我在尝试这样做时遇到了严重的困难:
s.balance.map(abs,schema='{b: int64}')
抛出TypeError: a bytes-like object is required, not 'int' 等等。
这个问题似乎与Best approach to apply a function to a column or create a new column by applying a function to another one? 已关闭有关,所以我不知道该去哪里。
ps:如果您觉得这很琐碎并想将问题标记下来,请同时提供完整的工作答案。
【问题讨论】:
-
我想指出
s = transform(s, b = abs(s.balance))做了正确的事。但在这个问题中,我使用abs函数作为一个易于理解的占位符,用于作用于一个变量/字段的任何函数。问题仍然存在,def FindC(word): return word.lower().find('c')不能像在transform(s,hasC = FindC(s.name))中那样使用。这样做我得到AttributeError: 'Field' object has no attribute 'lower'