Python 将Pandas列转换为DateTime II
我正在尝试将一列日期时间字符串转换为可理解的日期时间格式。当然,我已经在谷歌上搜索并尝试了几种解决方案。 这一条似乎对我来说是最令人鼓舞的,但两种推荐的方法对我的数据集都不起作用。 详情如下: 数据集名称:co 列:索引列 格式:2015年7月15日24:00,之前或之后不再有布兰克斯 我的努力:Python 将Pandas列转换为DateTime II,python,datetime,pandas,Python,Datetime,Pandas,我正在尝试将一列日期时间字符串转换为可理解的日期时间格式。当然,我已经在谷歌上搜索并尝试了几种解决方案。 这一条似乎对我来说是最令人鼓舞的,但两种推荐的方法对我的数据集都不起作用。 详情如下: 数据集名称:co 列:索引列 格式:2015年7月15日24:00,之前或之后不再有布兰克斯 我的努力: co['newdate'] = pd.to_datetime(co.index, format='%d.%m.%Y %H:%M') 我将索引列转换为名为“Datum”的“normal”列后尝试的下
co['newdate'] = pd.to_datetime(co.index, format='%d.%m.%Y %H:%M')
我将索引列转换为名为“Datum”的“normal”列后尝试的下一个
错误:时间数据“15.07.2015 24:00”与格式“%d.%m.%Y%H:%m”不匹配
这两种解决方案都会出现此错误。有人知道吗?您的格式字符串正确,但您的数据不正确,
24
不是有效的小时组件,因此出现错误:
In [138]:
pd.to_datetime('15.07.2015 24:00', format = '%d.%m.%Y %H:%M')
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
C:\WinPython-64bit-3.4.3.5\python-3.4.3.amd64\lib\site-packages\pandas\tseries\tools.py in _convert_listlike(arg, box, format)
329 try:
--> 330 values, tz = tslib.datetime_to_datetime64(arg)
331 return DatetimeIndex._simple_new(values, None, tz=tz)
pandas\tslib.pyx in pandas.tslib.datetime_to_datetime64 (pandas\tslib.c:23823)()
TypeError: Unrecognized value type: <class 'str'>
During handling of the above exception, another exception occurred:
ValueError Traceback (most recent call last)
<ipython-input-138-1546fb6950f0> in <module>()
----> 1 pd.to_datetime('15.07.2015 24:00', format = '%d.%m.%Y %H:%M')
C:\WinPython-64bit-3.4.3.5\python-3.4.3.amd64\lib\site-packages\pandas\tseries\tools.py in to_datetime(arg, errors, dayfirst, utc, box, format, exact, coerce, unit, infer_datetime_format)
343 return _convert_listlike(arg, box, format)
344
--> 345 return _convert_listlike(np.array([ arg ]), box, format)[0]
346
347 class DateParseError(ValueError):
C:\WinPython-64bit-3.4.3.5\python-3.4.3.amd64\lib\site-packages\pandas\tseries\tools.py in _convert_listlike(arg, box, format)
331 return DatetimeIndex._simple_new(values, None, tz=tz)
332 except (ValueError, TypeError):
--> 333 raise e
334
335 if arg is None:
C:\WinPython-64bit-3.4.3.5\python-3.4.3.amd64\lib\site-packages\pandas\tseries\tools.py in _convert_listlike(arg, box, format)
305 try:
306 result = tslib.array_strptime(
--> 307 arg, format, exact=exact, coerce=coerce
308 )
309 except (tslib.OutOfBoundsDatetime):
pandas\tslib.pyx in pandas.tslib.array_strptime (pandas\tslib.c:39900)()
ValueError: time data '15.07.2015 24:00' does not match format '%d.%m.%Y %H:%M' (match)
您需要将24
替换为0
,以便对此进行分析:
In [140]:
pd.to_datetime('15.07.2015 00:00', format = '%d.%m.%Y %H:%M')
Out[140]:
Timestamp('2015-07-15 00:00:00')
因此,您可以调用矢量化来修复这些错误的小时值:
In [144]:
df = pd.DataFrame({'date':['15.07.2015 24:00']})
print(df)
df['date'] = df['date'].str.replace('24:','00:')
print(df)
pd.to_datetime(df['date'], format = '%d.%m.%Y %H:%M')
date
0 15.07.2015 24:00
date
0 15.07.2015 00:00
Out[144]:
0 2015-07-15
Name: date, dtype: datetime64[ns]
因此,在您的情况下,您可以:
co.index = co.index.str.replace('24:','00:')
然后像以前一样转换哇,真是太优雅了。然而,这并不完全正确,因为2015年7月15日24:00实际上是2015年7月16日00:00-表示第二天的午夜,我将转换为
00:00
或23:59
,然后在这些行中添加一天/分钟
In [144]:
df = pd.DataFrame({'date':['15.07.2015 24:00']})
print(df)
df['date'] = df['date'].str.replace('24:','00:')
print(df)
pd.to_datetime(df['date'], format = '%d.%m.%Y %H:%M')
date
0 15.07.2015 24:00
date
0 15.07.2015 00:00
Out[144]:
0 2015-07-15
Name: date, dtype: datetime64[ns]
co.index = co.index.str.replace('24:','00:')