【问题标题】:How to set a variable to be "Today's" date in Python/Pandas如何在 Python/Pandas 中将变量设置为“今天”日期
【发布时间】:2014-03-11 09:44:54
【问题描述】:

我正在尝试将变量设置为今天的日期。

我查了一下,找到了一篇相关的文章:

Set today date as default value in the model

但是,这并没有特别回答我的问题。

我使用了建议的:

dt.date.today

但是之后

import datetime as dt     
date = dt.date.today
print date
 <built-in method today of type object at 0x000000001E2658B0>

 Df['Date'] = date

我没有得到我真正想要的作为今天日期的干净日期格式......月/日/年。

如何创建今天的变量,以便在 DataFrame 中输入该变量?

【问题讨论】:

  • 只需要调用方法即可。 date = dt.date.today()
  • 请注意,当第二天到来时,该日期对象仍将代表前一天。

标签: python date datetime formatting pandas


【解决方案1】:

如果你想要一个字符串mm/dd/yyyy而不是datetime对象,你可以使用strftime(字符串格式化时间):

>>> dt.datetime.today().strftime("%m/%d/%Y")
                   # ^ note parentheses
'02/12/2014'

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,所以尝试了很多东西 但最终这是解决方案。

    import time 
    
    print (time.strftime("%d/%m/%Y"))
    

    【讨论】:

      【解决方案3】:

      您提到您正在使用 Pandas(在您的标题中)。如果是这样,就不需要使用外部库,你可以使用to_datetime

      >>> pandas.to_datetime('today').normalize()
      Timestamp('2015-10-14 00:00:00')
      

      无论实际时间如何,这总是会在午夜返回今天的日期,并且可以直接在 pandas 中用于进行比较等。Pandas 的日期时间中总是包含 00:00:00。

      today 替换为now 将为您提供UTC 日期而不是本地时间;请注意,在这两种情况下都不会添加 tzinfo(时区)。

      在 0.23.x 之前的 pandas 版本中,normalize 可能不需要删除非午夜时间戳。

      【讨论】:

      • pd.to_datetime('now') 也有时间。
      • 在 pandas 0.23.4 中,'today' 给出本地时区的当前时间戳(不仅仅是日期),'now' 给出当前时间戳在UTC。因此,to_datetime 的行为发生了变化。有人知道这种新行为是否会继续存在吗? source
      • 给出自 v 0.23 以来的时间戳:2019-04-26 15:31:27.103623
      • curr_date = pd.to_datetime('today').date() 获取日期
      • @NickNick .date() 将转换为 datetime.date。要将日期保留为时间戳,请使用 curr_date = pd.to_datetime('today').normalize()
      【解决方案4】:

      Python3+ 中的简单解决方案:

      import time
      
      
      todaysdate = time.strftime("%d/%m/%Y")
      
      #with '.' isntead of '/'
      todaysdate = time.strftime("%d.%m.%Y")
      

      【讨论】:

        【解决方案5】:
        import datetime
        def today_date():
            '''
            utils:
            get the datetime of today
            '''
            date=datetime.datetime.now().date()
            date=pd.to_datetime(date)
            return date
        Df['Date'] = today_date()
        

        这可以安全地用于 pandas 数据帧。

        【讨论】:

          【解决方案6】:

          使用熊猫:pd.Timestamp("today").strftime("%m/%d/%Y")

          【讨论】:

          • 请尽可能使用 ISO pd.Timestamp('today').strftime("%Y-%m-%d")
          【解决方案7】:

          您还可以查看pandas.Timestamp,其中包括.now.today 等方法。 与pandas.to_datetime('now') 不同,pandas.Timestamp.now() 不会默认为 UTC:

            import pandas as pd
          
            pd.Timestamp.now() # will return California time
            # Timestamp('2018-12-19 09:17:07.693648')
          
            pd.to_datetime('now') # will return UTC time
            # Timestamp('2018-12-19 17:17:08')
          

          【讨论】:

            【解决方案8】:

            pd.datetime.now().strftime("%d/%m/%Y")

            这将输出为 '11/02/2019'

            如果你愿意,你可以使用添加时间

            pd.datetime.now().strftime("%d/%m/%Y %I:%M:%S")

            这将输出为 '11/02/2019 11:08:26'

            strftime formats

            【讨论】:

              【解决方案9】:

              已经有不少好的答案,但要回答关于“任何”时期的更一般的问题:

              在熊猫中使用function for time periods。对于Day,使用'D',对于月份'M'等:

              >pd.Timestamp.now().to_period('D')
              Period('2021-03-26', 'D')
              
              >p = pd.Timestamp.now().to_period('D')
              >p.to_timestamp().strftime("%Y-%m-%d")
              '2021-03-26'
              

              注意:如果需要考虑UTC,可以使用:pd.Timestamp.utcnow().tz_localize(None).to_period('D')...

              【讨论】:

                【解决方案10】:

                只需使用pd.Timestamp.now()

                例如:

                输入:pd.Timestamp.now()

                输出:Timestamp('2022-01-12 14:43:05.521896')

                我知道你想要的只是 Timestamp('2022-01-12') 你什么都不想 因此我们可以使用 replace 删除小时、分钟、秒和微秒 这里:

                输入:pd.Timestamp.now().replace(hour=0, minute=0, second=0, microsecond=0)

                输出:Timestamp('2022-01-12 00:00:00')

                但是看起来太复杂了吧,这里有一个使用 normalize 的简单方法

                输入:pd.Timestamp.now().normalize()

                输出:Timestamp('2022-01-12 00:00:00')

                【讨论】:

                • 使用我的方法你不需要任何额外的导入
                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2019-10-30
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2017-05-02
                • 1970-01-01
                相关资源
                最近更新 更多