2016-02-08 3 views
4

По какой-то причине, которую я не могу найти в журнале изменений Pandas для 0.17.1, сравнение серии datetime со значением int (Unix epoch) больше не работает. Может ли кто-нибудь объяснить это или указать мне в нужную секцию в журнале изменений?Ошибка сравнения недопустимого типа Pandas

Работа в 0.16.2

>>> import pandas as pd 
>>> import datetime 
>>> d = pd.Series([datetime.datetime(2016, 1, 1), datetime.datetime(2016, 1, 1)]) 
>>> d 
0 2016-01-01 
1 2016-01-01 
dtype: datetime64[ns] 
>>> d.dtype 
dtype('<M8[ns]') 
>>> d > 10 
0 True 
1 True 
dtype: bool 

Ошибка в 0.17.1

>>> import pandas as pd 
>>> import datetime 
>>> d = pd.Series([datetime.datetime(2016, 1, 1), datetime.datetime(2016, 1, 1)]) 
>>> d > 10 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/Users/sven/tmp/pandastest/pandas-0.17.1/lib/python2.7/site-packages/pandas/core/ops.py", line 726, in wrapper 
    res = na_op(values, other) 
    File "/Users/sven/tmp/pandastest/pandas-0.17.1/lib/python2.7/site-packages/pandas/core/ops.py", line 657, in na_op 
    raise TypeError("invalid type comparison") 
TypeError: invalid type comparison 
+0

Какая у вас нулевая версия, я получаю аналогичную ошибку в pandas '0.17.1' numpy' 1.9.3': 'C: \ WinPython-64bit-3.4.3.5 \ python-3.4.3.amd64 \ lib \ site-packages \ pandas \ core \ ops.py в na_op (x, y) 655 # целочисленные сравнения 656 if is_datetimelike_v_numeric (x, y): -> 657 raise TypeError ("недопустимое сравнение типов") 659 # numpy не любит сравнения против None' – EdChum

+0

'np .__ version__: '1.10.4'' (для обоих) – orange

+0

Возможно, стоит проверить [github] (https://github.com/pydata/pandas/ вопросы) об этом, это может быть регрессия. – EdChum

ответ

1

Вы все еще можете использовать явное преобразование:

u_time_ns = d.apply(lambda x: x.to_datetime64().view('int64')) 
u_time_ns 

0 1451606400000000000 
1 1451606400000000000 
dtype: int64 

u_time_ns > 10 

0 True 
1 True 
dtype: bool 

Или, если вы хотите, чтобы полагаться на отметках времени панды хранится как datetime64[ns]:

u_time_ns = d.view('int64') 

Извините, не знаю, почему это изменилось.

+0

Спасибо. Я пока буду использовать это как обходной путь. – orange

Смежные вопросы