我正在制作一个如下所示的时间序列数据集:
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 datetime格式。由于我的数据中的日期没有年份,因此使用:
df['DateTime'] = pd.to_datetime(df.DateTime)
我收到错误OutOfBoundsDatetime: Out of bounds nanosecond timestamp: 1-01-01 01:00:00
我理解为什么我会收到错误(因为它不是根据熊猫可接受的格式),但我想知道的是我如何将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小时。我只提供了演示数据直到5h。
我正在为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,现在就可以完美运行。
答案 0 :(得分:0)
# Remove spaces. Have in mind this will remove all spaces.
df['DateTime'] = df['DateTime'].str.replace(" ", "")
# I'm assuming year does not matter and that 01/01 is in the format day/month.
df['DateTime'] = pd.to_datetime(df['DateTime'], format='%d/%m%H:%M:%S')
答案 1 :(得分:0)
这是不可能的。 datetime
对象必须有一年。
您可以做的事情是确保所有年份都符合您的数据。
例如,要在将年份设置为2018时转换为datetime
:
df = pd.DataFrame({'DateTime': ['01/01 01:00:00', '01/01 02:00:00', '01/01 03:00:00',
'01/01 04:00:00', '01/01 05:00:00']})
df['DateTime'] = pd.to_datetime('2018/'+df['DateTime'], format='%Y/%m/%d %H:%M:%S')
print(df)
DateTime
0 2018-01-01 01:00:00
1 2018-01-01 02:00:00
2 2018-01-01 03:00:00
3 2018-01-01 04:00:00
4 2018-01-01 05:00:00