在 Python 中增加日期字符串 YYYY-MM-DD 的最快方法是啥?
Posted
技术标签:
【中文标题】在 Python 中增加日期字符串 YYYY-MM-DD 的最快方法是啥?【英文标题】:What is the quickest way to increment date string YYYY-MM-DD in Python?在 Python 中增加日期字符串 YYYY-MM-DD 的最快方法是什么? 【发布时间】:2018-10-25 03:58:47 【问题描述】:在 Pandas 中,我使用的是字符串格式 YYYY-MM-DD
的日期
用YYYY-MM-DD
格式的结果增加日期的最快方法是什么?
d1 = '2018-02-10'
我想将它增加 1 并将结果作为字符串返回:
d1_inc = '2018-02-11'
【问题讨论】:
“快速”是什么意思?你都尝试了些什么?请分享一些代码。确保澄清问题,使其不是基于意见的 【参考方案1】:纯 Python
您可以使用datetime
模块,它是标准库的一部分。有3个步骤:
-
通过
strptime
将字符串转换为datetime
对象。
通过timedelta
添加一天。
通过strftime
将生成的datetime
对象转换回字符串。
这是一个演示:
from datetime import datetime, timedelta
x = '2017-05-15'
res = (datetime.strptime(x, '%Y-%m-%d') + timedelta(days=1)).strftime('%Y-%m-%d')
print(res)
# 2017-05-16
熊猫
可以使用第 3 方 Pandas 执行等效步骤:
x = '2017-05-15'
# choose some combination of below methods
res = (pd.Timestamp(x) + pd.DateOffset(days=1)).strftime('%Y-%m-%d')
res = (pd.to_datetime(x) + pd.Timedelta('1 day')).strftime('%Y-%m-%d')
print(res)
# 2017-05-16
【讨论】:
【参考方案2】:使用pd.to_datetime
、pd.TimeDelta
和strftime
:
fmt = '%Y-%m-%d'
(pd.to_datetime(<your series or column>, format=fmt) + pd.Timedelta('1 days')).dt.strftime(date_format=fmt)
示例
df = pd.DataFrame('date': ['2017-04-02', '2017-04-23'])
fmt = '%Y-%m-%d'
>>> (pd.to_datetime(df.date, format=fmt) + pd.Timedelta('1 days')).dt.strftime(date_format=fmt)
0 2017-04-03
1 2017-04-24
Name: date, dtype: object
【讨论】:
【参考方案3】:您可以使用 datetime 和 timedelta 对象执行算术运算。
from datetime import datetime, timedelta
d = datetime(year=2018, month=3, day=1)
t = timedelta(days=1)
d + t
# datetime.datetime(2018, 3, 2, 0, 0)
d + t + t
# datetime.datetime(2018, 3, 3, 0, 0)
for i in range(30):
d += 1
print(d)
# datetime.datetime(2018, 3, 31, 0, 0)
【讨论】:
【参考方案4】:你的意思是这样的
date = datetime.date(2015,5,15)
date += datetime.timedelta(days=1)
【讨论】:
【参考方案5】:这取决于您所说的最快是什么意思。我假设您的意思是最快的编程方式,而不是最短的程序执行时间(这在您执行大量此类操作时可能是相关的)。
from datetime import datetime, timedelta
original_date = '2018-5-15'
print('The original date is , the date one day later is: '.
format(original_date, (datetime.strptime(original_date, '%Y-%m-%d') +
timedelta(days=1)).strftime('%Y-%m-%d')
分步版本:
从字符串创建一个日期时间对象,注意显示python格式的字符串(见the documentation for more information)
dt = datetime.strptime(original_date, '%Y-%m-%d')
增加一天
dt += timedelta(days=1)
将其重新格式化为请求的字符串
print(dt.strftime('%Y-%m-%d'))
就是这样!
【讨论】:
我的意思是最快的执行时间。 啊酷,check this answer 了解如何加快 strp/ftime 的一些想法。并行化也将有很大帮助(如果您没有对数据进行任何本质上串行的操作)。根据您的范围,可能值得研究完全避免日期/日期时间对象。只需硬编码整个事情,包括闰年。以上是关于在 Python 中增加日期字符串 YYYY-MM-DD 的最快方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章