2016-04-14 27 views
1

私はPandas DataFrameとDatetimeオブジェクトの比較を実行しようとしています。pandas DataFrameとdatetimeの比較エラー

--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 
<ipython-input-950-a1d9be25e98f> in <module>() 
     7 test1 = df['date'] >= datetime(2000, 1, 2) 
     8 # Returns error 
----> 9 test2 = datetime(2000, 1, 2) <= df['date'] 

TypeError: can't compare datetime.datetime to Series 

なぜ第2の比較が動作しない:このエラーになり

import pandas as pd 
from datetime import datetime 

df = pd.DataFrame({'date': [ datetime(2000, 1, 1)]}) 

# Works fine 
test1 = df['date'] >= datetime(2000, 1, 2) 
# Returns error 
test2 = datetime(2000, 1, 2) <= df['date'] 

?バグがありますか、これは比較を実行するための不正な方法ですか?


実行: のpython 2.7、パンダ0.18、Windowsの2010サーバー、アナコンダ

+0

何これは私の作品としてあなたnumpyのバージョンがある: 'test2は アウト[222]: 0偽 名:日、DTYPE:bool' – EdChum

+0

@EdChum私はnumpyのpy27にインストール1.10.4が、このdoesntの仕事を持っています私のために。あなたのnumpyのバージョンは何ですか? –

+0

npは '1.10.4'です。パンダは' 0.18.0'ですが、python 3.4 64ビット – EdChum

答えて

2

私は、これがPython2.7の日時比較の癖であることをかなり確信している:

は、次のスクリプトを考えてみましょうdatetimeオブジェクトを、オブジェクトと比較したときにNotImplementedを発生させたオブジェクトと等しいオブジェクトと比較するオブジェクトと比較します。

from datetime import datetime 

class ComparesEqualClass(object): 
    def __eq__(self, other): 
     return True 

    def __ne__(self, other): 
     return not self == other 

    def __lt__(self, other): 
     return False 

    def __gt__(self, other): 
     return False 

    __req__ = __eq__ 
    __rne__ = __ne__ 
    __rlt__ = __lt__ 
    __rgt__ = __gt__ 

ComparesEqual = ComparesEqualClass() 

if __name__ == "__main__": 
    print(ComparesEqual < datetime(2001, 1, 1)) 
    print(datetime(2001, 1, 1) < ComparesEqual) 

2.7上で実行:

$ python2.7 comp_demo.py 
False 
Traceback (most recent call last): 
    File "comp_demo.py", line 29, in <module> 
    print(datetime(2001, 1, 1) < ComparesEqual) 
TypeError: can't compare datetime.datetime to ComparesEqualClass 

と3.5に:

$ python3.5 comp_demo.py 
False 
False 

私は右側に比較するときに2.7 datetimeオブジェクトは少し厳しすぎることを想像してみてください。 Dataframeの__lt__または__le__または何らかのメソッドが呼び出されるので、データフレームがコンパレータの左側にあることを確認してください。問題はありません。

関連する問題