python - 过滤 Blaze 表中的日期

标签 python datetime anaconda blaze

我正在使用 Blaze (0.6.3) 和 Anaconda 2.1.0(在 Python 2.7.8 上)。 我正在尝试使用基于表行上的日期的过滤器。

模拟 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 本身可以识别 datetime 类型的 date 列,这正是我想要的,但随后比较失败。

我是否使用了错误的方式?

最佳答案

这是一个较旧的错误,现已修复。这里它正在使用开发版本。我相信 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/

相关文章:

python - 是否可以从 C 程序调用 python 方法?

python - 为什么通过共享内存的通信比通过队列慢得多?

arrays - 从哈希数组计算平均时间

python - 如何在 Theano 中更新扫描 Cython 代码?

python - 如何在不创建新环境的情况下从一个文件在 conda 中安装多个包?

python - 属性错误 : module 'functools' has no attribute 'wraps'

Python for 循环操作列表并删除曾经使用过的元素

python - 更快地刷新 sqlalchemy 表模型中的数据

python - 当日期和时间在不同的列中时,将数据从 csv 读取到 pandas

date - Kotlin:获取两个日期(现在和以前的日期)之间的差额