【问题标题】:Convert weekday name string into datetime将工作日名称字符串转换为日期时间
【发布时间】:2019-05-23 17:36:49
【问题描述】:

我有以下日期(作为对象格式):Tue 31 Jan 在熊猫系列中。

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

请问,我怎样才能做到这一点?我或多或少地理解 pandas.Datetime 可以在字符串日期更清晰(如6/1/1930 22:00)时轻松转换,但在我的情况下,当它们是工作日名称时则不能。

感谢您的帮助。

【问题讨论】:

  • 您能否发布代码以便我们了解发生了什么?
  • 一般情况下,您无法可靠地做到这一点,因为您没有关于年份的数据。
  • @prashantrana 不,它不是那个的副本。
  • @coldspeed 对不起我的错,但这是stackoverflow.com/questions/466345/…的重复
  • @prashantrana 差不多,但该解决方案不需要连接年份即可工作......

标签: python pandas datetime


【解决方案1】:

连接年份并使用自定义格式调用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


另一种选择是使用第 3 方 dateutil 库:

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

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

这可以用 PyPi 安装。


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

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

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

你可以用 PyPi 安装它。

【讨论】:

  • 这正是我想要的。非常感谢您和大家的帮助!
【解决方案2】:

转换为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'

【讨论】:

    【解决方案3】:

    这是实现相同结果的两种替代方法。

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

    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 是日期时间对象可用的所有可能的格式化选项。

    方法二:使用 dateutil.parser

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

    from dateutil import parser
    
    string = "Tue 31 Jan"
    
    date = parser.parse(string)
    
    print(date) # outputs 2018-01-31 00:00:00
    

    【讨论】:

      猜你喜欢
      • 2015-09-17
      • 1970-01-01
      • 2022-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-31
      • 2019-04-12
      • 2011-09-08
      相关资源
      最近更新 更多