【问题标题】:Convient way to convert int(yyyymmdd) to datetime object and str将 int(yyyymmdd) 转换为 datetime 对象和 str 的便捷方法
【发布时间】:2021-02-04 02:53:39
【问题描述】:

使用 python 3.8、pandas 1.14

我有一个整数值 20210126

我想创建一个 datetime 对象和它的 str 对象。

当前方法:

dt = 20210126
dt_dt = datetime(year=d_i//10000, month=(d_i%10000)//100, day=d_i%100)
str_dt = dt_dt.strftime("%Y%m%d")

替代方案:

dt = 20210126
dt_dt = datetime(year=int(str(d_i)[:3]), month=int(str(d_i)[3:5]), day= int(str(d_i)[5:])
str_dt = str(dt)

这很好,但是想知道是否有方便的方法。

【问题讨论】:

  • 这能回答你的问题吗? Convert Pandas Column to DateTime
  • @ti7 不完全是,经过一些调整后是的,但是下面的答案对于非熊猫用户来说也更直观,所以我更喜欢离开它,

标签: python datetime


【解决方案1】:

使用strptimestrftime

value = 20210126
d = datetime.datetime.strptime(str(value), "%Y%m%d")
# datetime.datetime(2021, 1, 26, 0, 0)
d.strftime("%a, %b %m, '%y")
# "Tue, Jan 01, '21"

此处列出的格式代码!:https://docs.python.org/3/library/datetime.html#strftime-and-strptime-format-codes

如果您在 Pandas 中工作,实际上可能更容易将它们保留为一些简单的整数类型,直到您需要它们,但您可以使用其 .to_datetime() method 类似地转换值

import pandas as pd
df = pd.DataFrame({"dates": [20010101, 20020202]})
#       dates
# 0  20010101
# 1  20020202
pd.to_datetime(df.dates, format="%Y%m%d")
# 0   2001-01-01
# 1   2002-02-02
# Name: dates, dtype: datetime64[ns]

这些也可以通过使用系列的.dt.strftime method 表示为某种形式的字符串
注意.dt 在这种情况下来自df.dates 列,是special accessor for datetime Series

df.dates = pd.to_datetime(df.dates, format="%Y%m%d")
#        dates
# 0 2001-01-01
# 1 2002-02-02
df.dates.dt.strftime("%a, %b %m, '%y")
# 0    Mon, Jan 01, '01
# 1    Sat, Feb 02, '02
# Name: dates, dtype: object

【讨论】:

    【解决方案2】:

    你可以使用strptime():

    import time
    
    dt = 20210126
    str_dt = str(dt)
    dt_dt = time.strptime(str_dt, '%Y%m%d')
    

    【讨论】:

    • 谢谢!您的方法简洁明了,但是我不想避免导入库。
    猜你喜欢
    • 1970-01-01
    • 2012-11-19
    • 2017-08-24
    • 1970-01-01
    • 2011-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多