我在Anaconda 2.1.0(在Python 2.7.8上)中使用Blaze(0.6.3)。
我正在尝试根据表格行上的日期使用过滤器。

模拟的TSV文件如下:

name    amount  date
foo 100 2001-05-11 08:54:48.063856
bar 1000    0001-01-01 00:00:00.0
baz 10000   1970-01-02 00:00:00.0


python代码是

from blaze import *
from datetime import datetime
data = Table(CSV('mock.tsv'))

data[data.name > 'bar']
data[data.amount > 1000]
data[data.date > datetime(1970,1,1)]


前两个过滤器正常,但是第三个过滤器抛出SyntaxError

这似乎可以归结为以下几点:

lambda (name, amount, date): date > (1970-01-01 00:00:00)


这在语法上是无效的。不知何故,某处将datetime(1970,1,1)转换为datetime(1970-01-01 00:00:00),然后忘记了datetime。 Blaze本身可以识别date类型的?datetime列,这是我想要的,但是随后比较失败。

我使用错误的方式吗?

最佳答案

这是一个较早的错误,此错误已得到修复。它在这里与开发版本一起使用。我相信Anaconda(0.6.5)的最新稳定版本也应该能正常工作

In [1]: !cat tmp/myfile.csv
name, amount, date
foo, 100, 2001-05-11 08:54:48.063856
bar, 1000, 0001-01-01 00:00:00.0
baz, 10000, 1970-01-02 00:00:00.0

In [2]: from blaze import *

In [3]: data = Table('tmp/myfile.csv')

In [4]: from datetime import datetime

In [5]: data[data.date > datetime(1970,1,1)]
Out[5]:
  name  amount                       date
0  foo     100 2001-05-11 08:54:48.063856
1  baz   10000        1970-01-02 00:00:00


以下应解决您的问题

conda update blaze


另外,Blaze很乐意将您的字符串强制为适当的类型,以防万一您懒得自己创建日期时间

In [6]: data[data.date > '1970-01-01']
Out[6]:
  name  amount                       date
0  foo     100 2001-05-11 08:54:48.063856
1  baz   10000        1970-01-02 00:00:00

关于python - 在Blaze表中过滤日期,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26845813/

10-12 19:26