Почему pandas NaT поддерживает метод date (), но не метод time ()? - PullRequest
1 голос
/ 14 февраля 2020

Я не могу понять следующее поведение, почему один метод ломается, а другой нет?

In [1]: import pandas as pd                                                     

In [2]: pd.NaT                                                                  
Out[2]: NaT

In [3]: pd.NaT.date()                                                           
Out[3]: NaT

In [4]: pd.NaT.time()                                                           
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-4-19f140eaf187> in <module>
----> 1 pd.NaT.time()

pandas/_libs/tslibs/nattype.pyx in pandas._libs.tslibs.nattype._make_error_func.f()

ValueError: NaTType does not support time

In [5]:                                     

1 Ответ

1 голос
/ 14 февраля 2020

Это обсуждалось в проекте Pandas ранее.

См., Например, этот комментарий в PR # 10372 , который реализует код, который делает date() return NaT вместо того, чтобы выдавать ошибку:

Я думаю, что вещи с датой должны быть NaT, например, дата, сейчас, сегодня

Согласовано. NaT - это экземпляр даты и времени, а также экземпляр даты.

Со временем у меня тоже все в порядке, хотя это и раздвигает границы семанти c

I не согласны. NaT не является временным случаем. Мы не должны возвращать его из метода, который обещает вернуть время.

Так что все сводится к типу NaT, реализующему те же интерфейсы, что и Python datetime * Типы 1025 * и date , но не тип time .

Это естественно, поскольку Pandas метки времени могут представлять собой полную метку времени (с датой и временем) или дата, но не время, независимое от даты.

По этой причине те немногие функции, которые преобразуют или возвращают объекты этих двух типов, вернут NaT, в то время как большинство других выдает ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...