pandas :解析24:00而不是00:00 [英] Pandas: parsing 24:00 instead of 00:00
问题描述
我有一个数据集,其中小时记录为 [0100:2400]
,而不是 [0000:2300]
例如
pd.to_datetime('201704102300',format ='%Y%m%d%H%M')
返回
Timestamp('2017-04-10 20:00:00')
但是
pd.to_datetime('201704102400',format ='%Y%m%d%H%M')
给我错误:
ValueError:未转换的数据保留:0
如何解决此问题?
我可以手动调整数据,例如本
Pandas使用系统 strptime
,因此,如果您需要非标准的内容,则可以自己滚动.
代码:
将pandas导入为pd导入日期时间为dtdef my_to_datetime(date_str):如果date_str [8:10]!='24':返回pd.to_datetime(date_str,format ='%Y%m%d%H%M')date_str = date_str [0:8] +'00'+ date_str [10:]返回pd.to_datetime(date_str,format ='%Y%m%d%H%M')+ \dt.timedelta(days = 1)打印(my_to_datetime('201704102400'))
结果:
<代码> 2017-04-11 00:00:00
对于 pandas.DataFrame
中的列:
df ['time'] = df.time.apply(my_to_datetime)
I have a dataset, in which the hour is recorded as [0100:2400]
, instead of [0000:2300]
For example
pd.to_datetime('201704102300', format='%Y%m%d%H%M')
returns
Timestamp('2017-04-10 20:00:00')
But
pd.to_datetime('201704102400', format='%Y%m%d%H%M')
gives me the error:
ValueError: unconverted data remains: 0
How can I fix this problem?
I can manually adjust the data, such as mentioned in this SO Post, but I think pandas should have handled this case already?
UPDATE:
And how to do it in a scalable way for dataframe? For example, the data look like this
Pandas uses the system strptime
, and so if you need something non-standard, you get to roll your own.
Code:
import pandas as pd
import datetime as dt
def my_to_datetime(date_str):
if date_str[8:10] != '24':
return pd.to_datetime(date_str, format='%Y%m%d%H%M')
date_str = date_str[0:8] + '00' + date_str[10:]
return pd.to_datetime(date_str, format='%Y%m%d%H%M') + \
dt.timedelta(days=1)
print(my_to_datetime('201704102400'))
Results:
2017-04-11 00:00:00
For a Column in a pandas.DataFrame
:
df['time'] = df.time.apply(my_to_datetime)
这篇关于 pandas :解析24:00而不是00:00的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!