【问题标题】:How can I parse this date format into datetime? Python/Pandas如何将此日期格式解析为日期时间?蟒蛇/熊猫
【发布时间】:2020-12-16 14:57:26
【问题描述】:

我目前拥有的开始日期格式是2019-09-04 16:00 UTC+3,我正在尝试将其转换为2019-09-04 16:00:00+0300 的日期时间格式。

我认为可以使用的格式是format='%Y-%m-%d %H:%M %Z%z',但是当我运行它时,我收到了错误消息ValueError: Cannot parse both %Z and %z

有谁知道要使用的正确格式,还是我应该尝试完全不同的方法?谢谢。

编辑 抱歉,我很难用语言表达我想要做什么,希望我能澄清一下。

我希望将数据框中的所有日期和时间更改为日期时间格式。

这是我尝试使用的方法,但出现了错误 df['datepicker'] = pd.to_datetime(df['datepicker'], format='%Y-%m-%d %H:%M %Z%z')

这是我目前拥有的数据样本。

datepicker
2019-09-07 16:00 UTC+2
2019-09-04 18:30 UTC+4
2019-09-06 17:00 UTC±0
2019-09-10 16:00 UTC+1
2019-09-04 18:00 UTC+3

这就是我希望将它们转换成的时间戳格式。

datepicker
2019-09-07 16:00:00+0200
2019-09-04 18:30:00+0400
2019-09-06 17:00:00+0000
2019-09-10 16:00:00+0100
2019-09-04 18:00:00+0300

【问题讨论】:

  • 你试过的代码sn-p在哪里?
  • 我在原帖中添加了更多详细信息,请您再查看一下好吗?
  • UTC 偏移量是否始终表示为一位数小时?或者是否还会出现“+5:30”之类的内容,例如亚洲/加尔各答时区?
  • @MrFuppes 我想让它能够更好地处理所有时区,所以像 asia/Kolkata 或 asia/Tehran 这样的事情也需要正确处理。将± 更改为+ 似乎已经解决了所有问题,只是现在时间戳显示相反的UTC 时间+4 现在是-4,有什么想法吗?
  • 没关系,我是个白痴,它工作正常。感谢您的所有帮助。

标签: python pandas datetime timezone datetime-format


【解决方案1】:

如果你稍微调整一下字符串,pandas.to_datetime 应该会愉快地解析这个:

import pandas as pd
df = pd.DataFrame({"datepicker":[ "2019-09-07 16:00 UTC+2", "2019-09-04 18:30 UTC+4",
                                  "2019-09-06 17:00 UTC±0", "2019-09-10 16:00 UTC+1", 
                                  "2019-09-04 18:00 UTC+3"]})
df['datetime'] = pd.to_datetime(df['datepicker'].str.replace('±', '+'))
# df['datetime']
# 0    2019-09-07 16:00:00-02:00
# 1    2019-09-04 18:30:00-04:00
# 2    2019-09-06 17:00:00+00:00
# 3    2019-09-10 16:00:00-01:00
# 4    2019-09-04 18:00:00-03:00
# Name: datetime, dtype: object

请注意,由于混合 UTC 偏移量,列的数据类型是“对象”(日期时间对象)。如果您愿意,您也可以立即转换为 UTC,以获取 dtype datetime[ns] 列:

df['UTC'] = pd.to_datetime(df['datepicker'].str.replace('±', '+'), utc=True)
# df['UTC']
# 0   2019-09-07 18:00:00+00:00
# 1   2019-09-04 22:30:00+00:00
# 2   2019-09-06 17:00:00+00:00
# 3   2019-09-10 17:00:00+00:00
# 4   2019-09-04 21:00:00+00:00
# Name: UTC, dtype: datetime64[ns, UTC]

【讨论】:

    【解决方案2】:

    当我定义如下。它可以按您的预期工作。

    from datetime import datetime, timedelta, timezone
    
    UTC = timezone(timedelta(hours=+3))
    dt = datetime(2019, 1, 1, 12, 0, 0, tzinfo=UTC)
    timestampStr = dt.strftime("%Y-%m-%d %H:%M %Z%z")
    print(timestampStr)
    

    输出:

    2019-01-01 12:00 UTC+03:00+0300
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-18
      • 2015-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-22
      • 2020-11-16
      相关资源
      最近更新 更多