2

我最近开始将我的数据探索代码集pandasblaze. 我遇到了以下问题。

认为:

from blaze import *

s = Data([(1, 'Alice', 100),
...           (2, 'Bob', -200),
...           (3, 'Charlie', 300),
...           (4, 'Denis', 400),
...           (5, 'Edith', -500)],
...          fields=['id', 'name', 'balance'])

我们可以pandas.DataFrame通过into容易地计算出类似的东西:

into(pd.DataFrame,s).balance.apply(abs)

但是,我在尝试这样做时遇到了严重的困难:

s.balance.map(abs,schema='{b: int64}')

抛出一个TypeError: a bytes-like object is required, not 'int'除其他外。

这个问题似乎与将函数应用于列或通过将函数应用于另一个列来创建新列的最佳方法有关?这是关闭的,所以我不知道去哪里。

ps:如果您觉得这很琐碎并想将问题标记下来,还请提供完整的工作答案。

4

1 回答 1

1

尝试'int64'作为传递datashape,而不是传递 的值schema。它是第二个关键字参数,所以你不需要命名它。以下:

from blaze import *
s = Data([(1, 'Alice', 100),
          (2, 'Bob', -200),
          (3, 'Charlie', 300),
          (4, 'Denis', 400),
          (5, 'Edith', -500)],
          fields=['id', 'name', 'balance'])
s.balance.map(abs, 'int64')

为我工作,并产生:

   balance
0      100
1      200
2      300
3      400
4      500

ps 虽然从 blaze 导入所有内容似乎会破坏内置的absblaze.expr.abs但我认为这并不重要。

于 2016-02-05T20:09:05.640 回答