pd.to_datetime ValueError: данная строка даты, скорее всего, не дата - PullRequest
0 голосов
/ 31 марта 2019

У меня есть столбец DataFrame с датами (в 2 форматах), которые я хочу перекодировать в 1 формат datetime.

Значения столбца выглядят следующим образом:

0       2011-11-23 16:13:50
1                2016-02-06
2                2011-11-27
3       2014-04-17 22:41:08
4       2013-12-11 17:08:20
5                2011-08-13
6                2007-07-25
7       2009-03-17 15:55:59
8                2017-08-25

и т. Д.

Я хочу сделать это с помощью следующей команды:

df['Date'] = df['Date'].apply(lambda x: pd.to_datetime(x[0]))

ошибка:

Traceback (most recent call last):
  File "/Users/stevengerrits/miniconda3/envs/py35thesis/lib/python3.5/site-packages/pandas/core/tools/datetimes.py", line 377, in _convert_listlike
    values, tz = conversion.datetime_to_datetime64(arg)
  File "pandas/_libs/tslibs/conversion.pyx", line 188, in pandas._libs.tslibs.conversion.datetime_to_datetime64
TypeError: Unrecognized value type: <class 'str'>
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "/Users/stevengerrits/miniconda3/envs/py35thesis/lib/python3.5/site-packages/IPython/core/interactiveshell.py", line 2961, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-16-e0bd36ee24b7>", line 1, in <module>
    df['Date'] = df['Date'].apply(lambda x: pd.to_datetime(x[0]))
  File "/Users/stevengerrits/miniconda3/envs/py35thesis/lib/python3.5/site-packages/pandas/core/series.py", line 3194, in apply
    mapped = lib.map_infer(values, f, convert=convert_dtype)
  File "pandas/_libs/src/inference.pyx", line 1472, in pandas._libs.lib.map_infer
  File "<ipython-input-16-e0bd36ee24b7>", line 1, in <lambda>
    df['Date'] = df['Date'].apply(lambda x: pd.to_datetime(x[0]))
  File "/Users/stevengerrits/miniconda3/envs/py35thesis/lib/python3.5/site-packages/pandas/core/tools/datetimes.py", line 469, in to_datetime
    result = _convert_listlike(np.array([arg]), box, format)[0]
  File "/Users/stevengerrits/miniconda3/envs/py35thesis/lib/python3.5/site-packages/pandas/core/tools/datetimes.py", line 380, in _convert_listlike
    raise e
  File "/Users/stevengerrits/miniconda3/envs/py35thesis/lib/python3.5/site-packages/pandas/core/tools/datetimes.py", line 368, in _convert_listlike
    require_iso8601=require_iso8601
  File "pandas/_libs/tslib.pyx", line 492, in pandas._libs.tslib.array_to_datetime
  File "pandas/_libs/tslib.pyx", line 739, in pandas._libs.tslib.array_to_datetime
  File "pandas/_libs/tslib.pyx", line 733, in pandas._libs.tslib.array_to_datetime

1 Ответ

1 голос
/ 31 марта 2019

Первая попытка to_datetime с errors='coerce' только для преобразования не разбираемых значений в NaT:

df['Date'] = pd.to_datetime(df['Date'],  errors='coerce')
print (df)
                 Date
0 2011-11-23 16:13:50
1 2016-02-06 00:00:00
2 2011-11-27 00:00:00
3 2014-04-17 22:41:08
4 2013-12-11 17:08:20
5 2011-08-13 00:00:00
6 2007-07-25 00:00:00
7 2009-03-17 15:55:59
8 2017-08-25 00:00:00

Если работа не возможна, укажите несколько форматов с помощью errors='coerce'и соединить вместе Series.combine_first для замены пропущенных значений другим Series:

date1 = pd.to_datetime(df['Date'],format='%Y-%m-%d %H:%M:%S', errors='coerce')
date2 = pd.to_datetime(df['Date'],format='%Y-%m-%d', errors='coerce')

df['Date'] = date1.combine_first(date2)
print (df)
                 Date
0 2011-11-23 16:13:50
1 2016-02-06 00:00:00
2 2011-11-27 00:00:00
3 2014-04-17 22:41:08
4 2013-12-11 17:08:20
5 2011-08-13 00:00:00
6 2007-07-25 00:00:00
7 2009-03-17 15:55:59
8 2017-08-25 00:00:00
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...