2014-02-26 52 views
2

給定一個數據幀與一對夫婦時間戳:無法減去datetime64使用DataFrame.eval()

In [88]: df.dtypes 
Out[88]: 
Time    datetime64[ns] 
uniqstime  datetime64[ns] 
dtype: object 

如果我打電話eval(),我得到一個錯誤類型:

In [91]: df.eval('since = Time - uniqstime') 
... 

ValueError: unkown type timedelta64[ns] 

(由這樣,「未知」的錯誤消息拼寫錯誤)

但我可以使用Python的符號:

In [92]: df['since'] = df.Time - df.uniqstime 

在numexpr中分配timedelta有問題嗎?

+3

https://github.com/pydata/pandas/issues/5007 - 目前不支持。除非對它有很大的興趣(無論如何這些都是在Python空間中完成的,所以在這裏使用eval沒有真正的優勢)。 – Jeff

+1

@Jeff如果你讓你的評論一個答案,我會接受它。 – chrisaycock

+0

未知的拼寫錯誤來自numexpr –

回答

3

這已經是GitHub上的問題(儘管是封閉的),在這裏看到:https://github.com/pydata/pandas/issues/5007

正是在這個時候不支持。然而,它們並不是ATM的真正優勢,因爲這些計算無論如何都是在python空間中完成的。

3

除非您有意讓代碼更短且更易讀(一個值得稱讚的目標),否則numexpr必須支持timedelta64操作才能獲得性能優勢。正如@Jeff所說,這些(和datetime64操作)在Python空間中進行評估,因爲numexpr不支持pandasNaTNa - T ime)。然而,非timedelta64 ops 使用numexpr評估,所以你可能必須有一個非常巨大的timedelta64陣列,因爲它創造了一個瓶頸。

+0

是的,代碼的可讀性真的是這裏的目標。感謝您的澄清。 – chrisaycock