【发布时间】:2018-09-30 07:49:00
【问题描述】:
我正在研究如下所示的时间序列数据集:
DateTime SomeVariable
0 01/01 01:00:00 0.24244
1 01/01 02:00:00 0.84141
2 01/01 03:00:00 0.14144
3 01/01 04:00:00 0.74443
4 01/01 05:00:00 0.99999
日期没有年份。最初,DateTime 的 dtype 是对象,我正在尝试将其更改为 pandas 日期时间格式。由于我的数据中的日期没有年份,因此使用:
df['DateTime'] = pd.to_datetime(df.DateTime)
我收到错误OutOfBoundsDatetime: Out of bounds nanosecond timestamp: 1-01-01 01:00:00
我明白为什么我会收到错误(因为它不符合 pandas 可接受的格式),但我想知道如何将 dtype 从 object 更改为 pandas datetime 格式,而我的日期中没有年份。我将不胜感激。
编辑 1:
从那以后,我知道如果数据中没有年份,我就无法做到这一点。所以这就是我试图改变dtype的方式:
df = pd.read_csv(some file location)
df['DateTime'] = pd.to_datetime('2018/'+df['DateTime'], format='%y%d/%m %H:%M:%S')
df.head()
这样做,我得到:
ValueError: time data '2018/ 01/01 01:00:00' doesn't match format specified.
编辑 2:
将格式更改为'%Y/%m/%d %H:%M:%S'。
我的数据是每小时数据,所以一直到 24 小时。我只提供了演示数据,直到 5 小时。
我得到了将年份添加到 DateTime 的空间。为了删除它,这就是我所做的:
df['DateTime'] = pd.to_datetime('2018/'+df['DateTime'][1:], format='%Y/%m/%d %H:%M:%S')
我收到以下错误:
ValueError: time data '2018/ 01/01 02:00:00' doesn't match format specified
使用相同的代码将格式更改为'%y/%m/%d %H:%M:%S',这是我得到的错误:
ValueError: time data '2018/ 01/01 02:00:00' does not match format '%y/%m/%d %H:%M:%S' (match)
问题是因为年后的差距,但我无法摆脱它。
编辑 3:
添加年份后我可以摆脱空间,但是我仍然无法更改 dtype。
df['DateTime'] = pd.to_datetime('2018/'+df['DateTime'].str.strip(), format='%Y/%m/%d %H:%M:%S')
ValueError: time data '2018/01/01 01:00:00' doesn't match format specified
我注意到错误中的日期和时间之间有 2 个空格,但是在格式中添加 2 个空格并没有帮助。
编辑 4(解决方案):
删除了所有的多个空格。格式仍然不匹配。问题是因为时间格式。我的数据中的时间是 1-24,熊猫支持 0-23。只需将时间 24:00:00 更改为 00:00:00,现在就可以完美运行了。
【问题讨论】:
-
或将格式更改为
'%y %d/%m %H:%M:%S'。 -
我已经尝试过将格式更改为 '%y %d/%m %H:%M:%S' 的第二个建议。它导致 ValueError: time data '2018/ 01/01 01:00:00' does not match format '%y %d/%m %H:%M:%S' (match)
-
您也没有正确使用大小写。请再次检查我的答案。例如,
%Y与%y的含义不同。 -
只要
df['DateTime'] = pd.to_datetime('2018/'+df['DateTime'].str.strip(), format='%Y/%m/%d %H:%M:%S')。 -
你到了那里就有点讨厌! :D
.str.replace(r'\s+', ' ')将用一个空格替换多个空格。
标签: python pandas datetime time-series