我有一个从 JSON 读取的 pandas 数据框,其中一个日期列是一种奇怪的时间戳格式,如下所示
“/日期(1405961743000+0100)/”
。如何将整列转换为 python 日期?
我已经能够使用 datetime 手动将该日期转换为 python 日期fromtimestamp
前 10 位数字的函数,即datetime.datetime.fromtimestamp(1405961743)
但我正在努力转换整个专栏。
我猜我需要从每个条目中选择适当的数字,转换为整数,然后使用 fromtimestamp 函数,但我是 python (和 pandas)的新手,所以我很难做到这一点。
任何帮助,将不胜感激。
Thanks
显然,如果您知道 JSON 来自哪里,并且可以查看文档/询问作者/等等,那就更好了。了解该日期格式背后的实际意图是什么。 (它甚至可能由 Python 代码生成,使用您自己可以使用的库......)
但看看这些数字,我可以很好地猜测这意味着什么:1405961743000
是自 Unix 纪元以来的毫秒数(这解释了为什么您可以使用它的前 10 位数字作为自 Unix 纪元以来的秒数,至少在 2014 年左右的相当大的范围内),并且+0100
是相对于 GMT 的时区偏移量,单位为+HHMM
format.
因此,不是提取前 10 位数字,而是转换为 int,然后调用fromtimestamp
,你想要提取所有直到+
or -
,转换为int,除以1000,然后调用fromtimestamp
。尽管您给我们提供的唯一示例恰好有 0 毫秒这一事实意味着它们很有可能都会出现这种情况,在这种情况下,这种差异并不重要……
无论如何,接下来由您决定如何处理时区偏移。您想存储已知的本地日期时间吗? GMT 日期时间?天真的本地日期时间?它们都很容易从时间戳和偏移量中获取(尽管“意识到”意味着使用像 GMT-05:00 这样的假时区,当然它没有任何历史或 DST 信息),但你必须决定你想要哪一个。
无论您最终做什么,您可能需要考虑扩展 JSON 解码器以使其自动化,如示例中所示the docs https://docs.python.org/3/library/json.html。 (任何与正则表达式匹配的字符串r'/Date\((\d+)([+-]\d{4})\)/'
,第一组是时间戳,第二组是偏移量。)
但也许不是。特别是从parse_string
似乎不可重写,至少从 3.4 开始,所以看起来你必须对它进行猴子补丁。看这段代码 http://pastebin.com/a4XszBhE我把它们放在一起作为概念证明;你也许可以把它做得更好一点,但是如果他们不提供挂钩的话,你能把它做得干净的程度就会受到限制……
PS,如果您自己扩展 JSON,您可能需要考虑采用更标准化和自记录的方式来执行此操作。字典格式如图所示json
模块文档,您可以在其中有效地指定要调用的构造函数以及传递它的参数,这对于人们来说更容易理解(并为其添加钩子)。或者,还有一种将 YAML 格式编码为 JSON 格式的准标准方法,并且 YAML 是可扩展的(并且已经具有标准时间戳扩展)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)