如何在 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")
【讨论】:
请尽可能使用 ISOpd.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 文件转换为字典