我的数据集看起来像这样:
RecordDate Serial RecordHour Value
1 2015-03-18 304 T0000 0.0
2 2015-03-18 304 T0030 0.0
3 2015-03-18 304 T0100 0.0
我的目标是将RecordDate和RecordHour合并为一列。我已经将RecordDate转换为日期时间以启用此合并,但是在转换RecordHour(当前为Object)时遇到了问题。
我尝试了几种选择,包括:
df['RecordHour'] = pd.to_datetime(df['RecordHour'], format='T%H%M')
和
df['RecordHour'].apply(lambda x: datetime.strptime(x, 'T%H%M'))
但是所有的返回相同的错误:
ValueError: unconverted data remains: 0
我已经在RecordHour列中检查了数据集是否存在意外的零,是否可能'T%H%M'不是用于T0000的正确格式(等)?
感谢您的帮助!
答案 0 :(得分:1)
您可以在转换RecordDate
之前,之前同时使用以下两种方法进行转换:
df['Record_DateTime'] = pd.to_datetime(df['RecordDate']+df['RecordHour'], format='%Y-%m-%dT%H%M')
>>> df
RecordDate Serial RecordHour Value Record_DateTime
1 2015-03-18 304 T0000 0.0 2015-03-18 00:00:00
2 2015-03-18 304 T0030 0.0 2015-03-18 00:30:00
3 2015-03-18 304 T0100 0.0 2015-03-18 01:00:00
如果某些行存在问题,则可以使用:
df['Record_DateTime'] = pd.to_datetime(df['RecordDate']+df['RecordHour'], format='%Y-%m-%dT%H%M',errors='coerce')
在这种情况下,如果有问题,它将返回NaT
编辑:我认为这可能是您的某些条目中包含太多字符而无法用T%H%M
来解释。在这种情况下,您可以尝试将其切断:
df['RecordHour'] = pd.to_datetime(df['RecordHour'].str[:5], format='T%H%M')