【问题标题】:Pandas Converting to Datetime, dateutilparser error [duplicate]熊猫转换为日期时间,dateutilparser 错误 [重复]
【发布时间】:2021-09-09 13:29:47
【问题描述】:

我正在尝试合并两列;一个带有日期,另一个带有时间到单个日期时间列中。

df: 
      date         time
----  -----------  ------
   0  08 Sep 2021  00:00
   1  08 Sep 2021  00:00
   2  08 Sep 2021  00:00
   3  08 Sep 2021  00:05
   4  08 Sep 2021  00:30

我的做法是:

df['datetime'] = df['date'] + ' ' + df['time']

df: 

      date         time    datetime
----  -----------  ------  -----------------
   0  08 Sep 2021  00:00   08 Sep 2021 00:00
   1  08 Sep 2021  00:00   08 Sep 2021 00:00
   2  08 Sep 2021  00:00   08 Sep 2021 00:00
   3  08 Sep 2021  00:05   08 Sep 2021 00:05
   4  08 Sep 2021  00:30   08 Sep 2021 00:30

我试过了:

df['datetime'] = pd.to_datetime(df['datetime'])

我也试过了

df.loc[:, 'datetime'] = pd.to_datetime(df.date.astype(str) + ' ' + df.time.astype(str))

但是,我遇到了同样的错误:

Traceback (most recent call last):
  File "C:\Program Files\Python39\lib\site-packages\dateutil\parser\_parser.py", line 649, in parse
    ret = self._build_naive(res, default)
  File "C:\Program Files\Python39\lib\site-packages\dateutil\parser\_parser.py", line 1235, in _build_naive
    naive = default.replace(**repl)
ValueError: hour must be in 0..23

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "pandas\_libs\tslib.pyx", line 534, in pandas._libs.tslib.array_to_datetime
  File "pandas\_libs\tslibs\parsing.pyx", line 257, in pandas._libs.tslibs.parsing.parse_datetime_string
  File "C:\Program Files\Python39\lib\site-packages\dateutil\parser\_parser.py", line 1368, in parse
    return DEFAULTPARSER.parse(timestr, **kwargs)
  File "C:\Program Files\Python39\lib\site-packages\dateutil\parser\_parser.py", line 651, in parse
    six.raise_from(ParserError(str(e) + ": %s", timestr), e)
  File "<string>", line 3, in raise_from
dateutil.parser._parser.ParserError: hour must be in 0..23: 09 Sep 2021 84'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "pandas\_libs\tslib.pyx", line 545, in pandas._libs.tslib.array_to_datetime
TypeError: invalid string coercion to datetime

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Program Files\Python39\lib\site-packages\dateutil\parser\_parser.py", line 649, in parse
    ret = self._build_naive(res, default)
  File "C:\Program Files\Python39\lib\site-packages\dateutil\parser\_parser.py", line 1235, in _build_naive
    naive = default.replace(**repl)
ValueError: hour must be in 0..23

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "C:\Users\harsh\AppData\Roaming\JetBrains\PyCharmCE2021.2\scratches\scratch_17.py", line 40, in <module>
    df.loc[:, 'datetime'] = pd.to_datetime(df.date.astype(str) + ' ' + df.time.astype(str))
  File "C:\Program Files\Python39\lib\site-packages\pandas\core\tools\datetimes.py", line 883, in to_datetime
    cache_array = _maybe_cache(arg, format, cache, convert_listlike)
  File "C:\Program Files\Python39\lib\site-packages\pandas\core\tools\datetimes.py", line 195, in _maybe_cache
    cache_dates = convert_listlike(unique_dates, format)
  File "C:\Program Files\Python39\lib\site-packages\pandas\core\tools\datetimes.py", line 401, in _convert_listlike_datetimes
    result, tz_parsed = objects_to_datetime64ns(
  File "C:\Program Files\Python39\lib\site-packages\pandas\core\arrays\datetimes.py", line 2193, in objects_to_datetime64ns
    raise err
  File "C:\Program Files\Python39\lib\site-packages\pandas\core\arrays\datetimes.py", line 2175, in objects_to_datetime64ns
    result, tz_parsed = tslib.array_to_datetime(
  File "pandas\_libs\tslib.pyx", line 379, in pandas._libs.tslib.array_to_datetime
  File "pandas\_libs\tslib.pyx", line 611, in pandas._libs.tslib.array_to_datetime
  File "pandas\_libs\tslib.pyx", line 749, in pandas._libs.tslib._array_to_datetime_object
  File "pandas\_libs\tslib.pyx", line 740, in pandas._libs.tslib._array_to_datetime_object
  File "pandas\_libs\tslibs\parsing.pyx", line 257, in pandas._libs.tslibs.parsing.parse_datetime_string
  File "C:\Program Files\Python39\lib\site-packages\dateutil\parser\_parser.py", line 1368, in parse
    return DEFAULTPARSER.parse(timestr, **kwargs)
  File "C:\Program Files\Python39\lib\site-packages\dateutil\parser\_parser.py", line 651, in parse
    six.raise_from(ParserError(str(e) + ": %s", timestr), e)
  File "<string>", line 3, in raise_from
dateutil.parser._parser.ParserError: hour must be in 0..23: 09 Sep 2021 84'

Process finished with exit code 1

如何正确地将两列组合成一个日期时间值?

【问题讨论】:

    标签: pandas dataframe datetime


    【解决方案1】:

    time 列中存在一些错误值,例如84,因此请使用errors='coerce' 将它们转换为NaT

    df['datetime'] = pd.to_datetime(df['datetime'], errors='coerce')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-18
      • 2018-12-08
      相关资源
      最近更新 更多