将T0000对象转换为日期时间时出现“未转换的数据仍然存在”错误

时间:2018-10-18 22:54:59

标签: python pandas datetime

我的数据集看起来像这样:

    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的正确格式(等)?

感谢您的帮助!

1 个答案:

答案 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')