如何将类似2017-03-09T10:34:11Z的字符串转换为日期时间?

时间:2018-08-06 19:56:34

标签: python pandas datetime-format string-to-datetime

我正在尝试分析开放食品事实数据集。 数据集很乱! 我目前正在尝试将'created_datetime'对象转换为Python datetime对象。此列中的条目都看起来像“ 2017-03-09T10:34:11Z”。 我尝试了带有和不带有“ infer_datetime_format”的普通to_datetime方法。他们俩都没有工作。 然后,我将字符串格式更改为如下所示的“ 2017 03 09 10 34 12”(我删除了“ Z”和“ T”,并在每个数字之间添加了一个空格)。 然后,我尝试再次运行to_datetime,将格式设置为'%Y%m%d%I M%%S'。 但是,无论我做什么,都会出现错误。在这种情况下,我得到:“'%'是格式为'%Y%m%d%I M%%S'的错误指令”。 有人可以帮我吗? 我真的很感激!

4 个答案:

答案 0 :(得分:2)

import pandas as pd
pd_date_time = pd.to_datetime("2017-03-09T10:34:11Z")
py_date_time = pd_date_time.to_pydatetime()

答案 1 :(得分:1)

如果您删除“ Z”和“ T”(例如下面的示例),则可以使用datetime.strptime转换为datetime。

from datetime import datetime
messy_date = "2017-03-09 10:34:11"
messy_date = messy_date.replace('T',' ')
messy_date = messy_date.replace('Z',' ')
datetime_object = datetime.strptime(messy_date, '%Y-%m-%d %I:%M:%S')
print(datetime_object)

输出为: 2017-03-09 10:34:11

答案 2 :(得分:0)

我不知道您拥有什么类型的对象,所以我不知道to_datetime函数的作用。

但是datetime.datetime.strptime之类的功能或Pandas中的任何功能都可以与您给出的示例完全一样。但是,它们将无法使用稍微不同的示例,例如:

2017 03 09 13 34 12

为什么?因为您使用的是%I(这意味着12小时制),而不是%H(这意味着24小时制),所以13不是有效的值%I

但是,实际上,为什么要首先更改字符串?为什么不直接使用与您的字符串匹配的格式呢?

>>> s = '2017-03-09T10:34:12Z'
>>> datetime.datetime.strptime(s, '%Y-%m-%dT%H:%M:%SZ')
datetime.datetime(2017, 3, 9, 10, 34, 12)

或者,如果您使用的是Pandas函数之一,或者dateutil之外的其他函数,则默认情况下它们应该可以正常工作:

>>> pd.to_datetime("2017-03-09T10:34:12Z")
Timestamp('2017-03-09 10:34:12')
>>> dateutil.parser.parse("2017-03-09T10:34:12Z")
datetime.datetime(2017, 3, 9, 10, 34, 12, tzinfo=tzutc())

(请注意,dateutil甚至认为Z意味着我们明确希望使用UTC时间戳,而不是单纯的时间戳。)

答案 3 :(得分:-1)

您尝试过正则表达式吗?甚至简单的yr, mo, day, hr, min, sec = datetime.split(" ")也可以。