将工作日名称字符串转换为日期时间

时间:2018-12-24 15:48:26

标签: python pandas datetime

我有以下日期(以对象格式):大熊猫系列中的Tue 31 Jan

,我尝试将其更改为:31/01/2019

请,我该如何实现?我或多或少地了解到 pandas.Datetime 可以在字符串日期更清晰(例如6/1/1930 22:00)时轻松转换,但在我的情况下,如果它们是工作日名称,则不容易转换。

感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

结合年份并使用自定义格式致电pd.to_datetime

s = pd.Series(['Tue 31 Jan', 'Mon 20 Feb',])
pd.to_datetime(s + ' 2019', format='%a %d %b %Y')

0   2019-01-31
1   2019-02-20
dtype: datetime64[ns]

这很好,只要您的所有日期都遵循这种格式即可。 如果不是这种情况,则无法可靠地解决。

有关日期时间格式的更多信息,请访问strftime.org


另一个选择是使用第三方dateutil库:

import dateutil
s.apply(dateutil.parser.parse)

0   2018-01-31
1   2018-02-20
dtype: datetime64[ns]

可以与PyPi一起安装。


另一种较慢的选择(但更灵活)是使用第三方datefinder库从包含随机文本的字符串中嗅探日期(如果需要的话):

import datefinder
s.apply(lambda x: next(datefinder.find_dates(x)))

0   2018-01-31
1   2018-02-20
dtype: datetime64[ns]

您可以使用PyPi安装它。

答案 1 :(得分:0)

以下是获得相同结果的两种替代方法。

方法1:使用日期时间模块

from datetime import datetime

datetime_object = datetime.strptime('Tue 31 Jan', '%a %d %b')

print(datetime_object) # outputs 1900-01-31 00:00:00

如果您提供了诸如Tue 31 Jan 2018之类的Year参数,那么此代码将起作用。

from datetime import datetime

datetime_object = datetime.strptime('Tue 31 Jan 2018', '%a %d %b %Y')

print(datetime_object) # outputs 2018-01-31 00:00:00

31/01/2019这样的格式打印结果日期。您可以使用

print(datetime_object.strftime("%d/%m/%Y")) # outputs 31/01/2018

Here是datetime对象可用的所有可能的格式设置选项。

方法2:使用dateutil.parser

此方法自动用当前年份填充Year参数。

from dateutil import parser

string = "Tue 31 Jan"

date = parser.parse(string)

print(date) # outputs 2018-01-31 00:00:00

答案 2 :(得分:0)

转换为datetime对象

如果您想使用datetime模块,则可以通过执行以下操作获得年份:

import datetime as dt

d = dt.datetime.strptime('Tue 31 Jan', '%a %d %b').replace(year=dt.datetime.now().year)

这将采用您的格式的日期,但以可靠的方式将默认年份1900替换为当前年份。

这与其他答案类似,但是使用内置的replace方法,而不是连接字符串。

输出

要从新的datetime对象中获得所需的输出,可以执行以下操作:

>>> d.strftime('%d/%m/%Y')
'31/01/2018'