0

我正在尝试分析 Open Food Facts Dataset。数据集非常混乱!我目前正在尝试将“created_datetime”对象转换为 Python 日期时间对象。此列中的条目都看起来像“2017-03-09T10:34:11Z”。我已经尝试过使用和不使用“infer_datetime_format”的普通 to_datetime 方法。他们都没有工作。然后我将字符串的格式更改为“2017 03 09 10 34 12”(我删除了“Z”和“T”并在每个数字之间添加了一个空格)。然后我尝试再次运行 to_datetime,将格式设置为 '%Y %m %d %IM% %S'。但无论我做什么,都会出错。在这种情况下,我得到:“'%' is a bad directive in format '%Y %m %d %IM% %S'”。有人可以帮我吗?我真的很感激!

4

4 回答 4

3
import pandas as pd
pd_date_time = pd.to_datetime("2017-03-09T10:34:11Z")
py_date_time = pd_date_time.to_pydatetime()
于 2018-08-06T20:05:18.950 回答
1

如果您删除“Z”和“T”,例如下面的示例,您可以使用 datetime.strptime 转换为日期时间。

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

于 2018-08-06T20:04:12.800 回答
0

我不知道你有什么类型的对象,所以我不知道这个to_datetime函数是做什么的。

但是像 Pandas 之类的函数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 时间戳,而不是一个简单的时间戳。)

于 2018-08-06T20:07:40.870 回答
-1

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

于 2018-08-06T20:03:31.663 回答