如何在 Python/Pandas 中将变量设置为“今天”日期

Posted

技术标签:

【中文标题】如何在 Python/Pandas 中将变量设置为“今天”日期【英文标题】:How to set a variable to be "Today's" date in 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() 请注意,当第二天到来时,该日期对象仍将代表前一天。 【参考方案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')

【讨论】:

使用我的方法你不需要任何额外的导入

以上是关于如何在 Python/Pandas 中将变量设置为“今天”日期的主要内容,如果未能解决你的问题,请参考以下文章

在 Python Pandas DataFrame 中将 timedelta64[ns] 列转换为秒

如何在 Pandas 数据框中将日期转换为 ISO-8601 DateTime 格式

在 Python pandas 中将 xlsx 文件转换为字典

在python pandas df中将月份数转换为名称

在 Python pandas 中将带有 $ 的货币转换为数字

如何在Python Pandas中将MultiIndex Dataframes与权重合并?