我想将datetime数组传递给Numba函数(无法向量化,否则会很慢)。我了解Numba支持numpy.datetime64。但是,它似乎支持datetime64
[D](日期精度),但不支持datetime64 [ns](毫秒精度)(我很难学到:是否已记录?)。
我试图将datetime64 [ns]转换为datetime64 [D],但似乎找不到方法!有任何想法吗?
我用下面的最少代码总结了我的问题。如果您运行的testdf(mydates)
是datetime64
[D],则可以正常运行。如果运行testdf(dates_input)
datetime64
[ns],则不会。请注意,此示例只是将日期传递给Numba函数,该函数尚未执行任何操作。我尝试将dates_input转换为datetime64
[D],但是转换不起作用。在我的原始代码中,我从SQL表读取到pandas数据框,并且需要一列将每个日期的日期更改为15日。
import numba
import numpy as np
import pandas as pd
import datetime
mydates =np.array(['2010-01-01','2011-01-02']).astype('datetime64[D]')
df=pd.DataFrame()
df["rawdate"]=mydates
df["month_15"] = df["rawdate"].apply(lambda r: datetime.date( r.year, r.month,15 ) )
dates_input = df["month_15"].astype('datetime64[D]')
print dates_input.dtype # Why datetime64[ns] and not datetime64[D] ??
@numba.jit(nopython=True)
def testf(dates):
return 1
print testf(mydates)
如果运行,我得到的错误testdf(dates_input)
是:
numba.typeinfer.TypingError: Failed at nopython (nopython frontend)
Var 'dates' unified to object: dates := {pyobject}
Series.astype
将所有类似日期的对象转换为datetime64[ns]
。要转换为datetime64[D]
,请values
在调用之前使用获取NumPy数组astype
:
dates_input = df["month_15"].values.astype('datetime64[D]')
请注意,NDFrames(例如Series和DataFrames)只能将类似日期时间的对象保存为dtype对象datetime64[ns]
。将所有日期时间喜欢项自动转换为通用dtype可以简化后续日期计算。但是,这使得不可能datetime64[s]
在DataFrame列中存储
对象。熊猫的核心开发人员Jeff
Reback解释说,
“我们不允许直接转换,因为它太复杂了,无法在内部保留除datetime64 [ns]以外的任何东西(根本没有必要)。”
另请注意,即使df['month_15'].astype('datetime64[D]')
具有dtype datetime64[ns]
:
In [29]: df['month_15'].astype('datetime64[D]').dtype
Out[29]: dtype('<M8[ns]')
当您遍历系列中的项目时,会得到pandasTimestamps
而不是datetime64[ns]
s。
In [28]: df['month_15'].astype('datetime64[D]').tolist()
Out[28]: [Timestamp('2010-01-15 00:00:00'), Timestamp('2011-01-15 00:00:00')]
因此,尚不清楚Numba确实有问题datetime64[ns]
,也可能只是有问题Timestamps
。抱歉,我无法检查-我没有安装Numba。
但是,尝试一下可能会有用
testf(df['month_15'].astype('datetime64[D]').values)
因为df['month_15'].astype('datetime64[D]').values
确实是dtype的NumPy数组datetime64[ns]
:
In [31]: df['month_15'].astype('datetime64[D]').values.dtype
Out[31]: dtype('<M8[ns]')
如果可行,那么您不必将所有内容都转换为datetime64[D]
,只需要将NumPy数组(而不是Pandas Series)传递给testf
。
问题内容: 如何将对象转换为(或Timestamp)? 在下面的代码中,我创建了一个和对象。 注意:很容易从时间戳获取日期时间: 但是我们如何从()中提取datetime或?Timestampnumpy.datetime64dt64 。 更新:我的数据集中的一个令人讨厌的例子(也许是激励性的例子)似乎是: 应该是,而不是长(!)()… 问题答案: 要将日期时间对象转换为代表UTC时间的日期时间对象
问题内容: 有一个Pandas DataFrame: 我想绘制A和B系列vs日期。 然后我要在A系列和B系列之间的区域上应用fill_between(): 哪个输出: matplotlib是否在函数中接受pandas datetime64对象?我应该将其转换为其他日期类型吗? 问题答案: 大熊猫寄存器的转换器中,其可将数字转换的日期时间的类型(如大熊猫DatetimeIndex,和D型的numpy
我目前正在将IntelliJ IDE用于复杂的GWT项目。我想在GWT的开发模式中利用JRebel,所以最近我为IntelliJ安装了JRebel插件,但在使其工作时遇到了麻烦。 基本上IntelliJ不具备在更改时自动编译应用程序的能力,所以每当您对代码进行更改时,我都必须进行编译- 信息:使用JavaC1.7.0_21编译java源代码信息:15个错误信息:0个警告信息:编译完成,9分钟5秒内
我最近安装了Xcode8测试版5。在我的MAC 10.11.6上的Appium 1.6.0测试版现在,在阅读了所有的论坛并使Appium启动并启动我的应用程序后,我无法找到如何用这个Appium 1.6.0测试版启动我的inspector和在我的应用程序中找到元素。如何使用appium 1.6.0测试版启动inspector?如果不能,我们如何找到xpath或找到元素??
IntelliJ IDEA 2018.2.3(终极版) 楼#IU-182.4323.46,建于2018年9月3日 jre:1.8.0_152-release-1248-b8 amd64 JVM:OpenJDK 64位服务器VM by JetBrains s.r.o Windows 10 10.0 插件:VisualVM启动器(1.10.138.2210) 当我单击Run选项卡中的launcher图
我们将Java版本从8升级到11,但我在使用Lombok的Getter和Setter注释实现POJO类时遇到了Getter/Setter方法的编译错误。 有没有一种方法可以使用Lombok的注释,该注释提供getter和setter而不在Java11中实现它们? 找不到getStoreName() 其中被声明为类中的全局变量,并在类上方使用@data Lombok注释。