Ошибка при преобразовании типа столбца в наборе данных в тип datetime с определенным форматом в python - PullRequest
0 голосов
/ 22 января 2019

У меня есть набор данных, и я хочу изменить формат столбца с именем «Последнее обновление».

 DB['Last Updated'].head()

 0     January 7, 2018
 1    January 15, 2018
 2      August 1, 2018
 3        June 8, 2018
 4       June 20, 2018
Name: Last Updated, dtype: object

Я хочу сделать формат как 1.07.2008, поэтому я написал следующеев питоне.

 DB['Last Updated'] = pd.to_datetime(DB['Last Updated'],format= '%d/%m/%Y')

Но появляется эта ошибка:

 TypeError                                 Traceback (most recent call last) ~/anaconda3/lib/python3.6/site-packages/pandas/core/tools/datetimes.py in _convert_listlike(arg, box, format, name, tz)
 302             try:
 --> 303                 values, tz = tslib.datetime_to_datetime64(arg)
304                 return DatetimeIndex._simple_new(values, name=name, tz=tz)

pandas/_libs/tslib.pyx in pandas._libs.tslib.datetime_to_datetime64()

TypeError: Unrecognized value type: <class 'str'>

 During handling of the above exception, another exception occurred:

ValueError                                Traceback (most recent call last)
 <ipython-input-62-1dd2ca5f727a> in <module>()
 ----> 1 DB['Last Updated'] = pd.to_datetime(DB['Last Updated'],format= '%d/%m/%Y')

~/anaconda3/lib/python3.6/site-packages/pandas/core/tools/datetimes.py in to_datetime(arg, errors, dayfirst, yearfirst, utc, box, format, exact, unit, infer_datetime_format, origin)
371     elif isinstance(arg, ABCSeries):
372         from pandas import Series
--> 373         values = _convert_listlike(arg._values, True, format)
374         result = Series(values, index=arg.index, name=arg.name)
375     elif isinstance(arg, (ABCDataFrame, MutableMapping)):

~/anaconda3/lib/python3.6/site-packages/pandas/core/tools/datetimes.py in _convert_listlike(arg, box, format, name, tz)
304                 return DatetimeIndex._simple_new(values, name=name, tz=tz)
305             except (ValueError, TypeError):
--> 306                 raise e
307 
308     if arg is None:

~/anaconda3/lib/python3.6/site-packages/pandas/core/tools/datetimes.py in _convert_listlike(arg, box, format, name, tz)
271                     try:
272                         result = array_strptime(arg, format, exact=exact,
--> 273                                                 errors=errors)
274                     except tslib.OutOfBoundsDatetime:
275                         if errors == 'raise':

pandas/_libs/tslibs/strptime.pyx in pandas._libs.tslibs.strptime.array_strptime()

 ValueError: time data 'January 7, 2018' does not match format '%d/%m/%Y' (match)

Как я могу обработать эту ошибку?

1 Ответ

0 голосов
/ 22 января 2019

Аргумент format в pd.to_datetime(...) используется для указания формата строки, из которой вы преобразуете (не для указания выходного формата).Чтобы преобразовать строки даты в объекты даты и времени, а затем в определенный формат вывода, вы можете сделать что-то вроде следующего:

import pandas as pd

data = [{'Last Updated': 'January 7, 2018'}, {'Last Updated': 'January 15, 2018'}]
df = pd.DataFrame(data)

df['Last Updated'] = pd.to_datetime(df['Last Updated'])
df['Last Updated'] = df['Last Updated'].dt.strftime('%d/%m/%Y')

print(df)
# OUTPUT
#   Last Updated
# 0   07/01/2018
# 1   15/01/2018 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...