2014-01-14 2 views
5

У меня есть некоторые трудности с функцией pandas to_datetime и датами вообще в пандах. В частности, to_datetime терпит неудачу при применении к серии pandas, не делая ничего, и я должен явно перебирать каждое значение отдельно, чтобы заставить функцию работать должным образом, хотя (по крайней мере, согласно this SO question) оба должны работать одинаково.Функция Pandas.to_datetime терпит неудачу.

In [81]: np.__version__ 
Out[81]: '1.6.1' 

In [82]: pd.__version__ 
Out[82]: '0.12.0' 

In [83]: a[0:10] 
Out[83]: 
0 8/31/2013 14:57:00 
1 8/31/2013 13:55:00 
2 8/31/2013 15:45:00 
3  9/1/2013 13:26:00 
4  9/1/2013 13:56:00 
5  9/2/2013 13:55:00 
6  9/3/2013 13:33:00 
7  9/3/2013 14:11:00 
8  9/3/2013 14:35:00 
9  9/4/2013 14:28:00 
Name: date_time, dtype: object 

In [84]: a[0] 
Out[84]: '8/31/2013 14:57:00' 

In [85]: a=pd.to_datetime(a) 

In [86]: a[0] 
Out[86]: '8/31/2013 14:57:00' 

In [87]: a=[pd.to_datetime(date) for date in a] 

In [88]: a[0] 
Out[88]: Timestamp('2013-08-31 14:57:00', tz=None) 

Любые мысли о том, почему это так? Кажется, что у меня возникают проблемы с этими данными, а столбец date_time не обрабатывается правильно, и я подозреваю, что это может иметь какое-то отношение к этому сбою.

Спасибо,

Dave

+0

ли работа для 'pd.to_datetime (а [0:10])'? – waitingkuo

+0

Кажется, это работает для меня с numpy 1.7 и pandas 0,12. – joris

+0

рассмотреть возможность обновления до numpy 1.7.1 – Jeff

ответ

4

Это исправлено в новых пандах, ошибки по умолчанию kwarg - это «повышение», а не «игнорирование».
Новое поведение не является:

In [21]: pd.to_datetime(dates) # same as errors='raise' 
... 
ValueError: Given date string not likely a datetime. 

In [22]: pd.to_datetime(dates, errors="ignore") # the original problem 
Out[22]: 
0 1/1/2014 
1   A 
dtype: object 

То есть, to_datetime больше не удается молча!

старый ответ держится ниже ...


Как DaveA указывает (после проверки мой комментарий), по умолчанию to_datetime не может тихо, если есть проблема, и возвращает то, что первоначально был принят:

In [1]: dates = pd.Series(['1/1/2014', 'A']) 

In [2]: pd.to_datetime(dates) # doesn't even convert first date 
Out[2]: 
0 1/1/2014 
1   A 
dtype: object 

In [3]: pd.to_datetime(dates, errors='raise') 
... 
ValueError: Given date string not likely a datetime. 

Примечание: Этот аргумент был coerce=True в более старых версиях панды.

In [4]: pd.to_datetime(dates, errors='coerce') 
Out[4]: 
0 2014-01-01 
1   NaT 
dtype: datetime64[ns] 

to_datetime is discussed in the timeseries section of the docs Такое поведение.

Вы можете увидеть, какие датам не удалось разобрать, проверив isnull:

In [5]: dates[pd.isnull(pd.to_datetime(dates, errors='coerce'))] 
Out[5]: 
1 A 
dtype: object 
1

функция Pandas.to_datetime терпит неудачу тихо, и просто возвращает исходное значение, если она выходит из строя. Один некорректный ввод может привести к сбою всего процесса.

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