繁体   English   中英

如何将 Python 日期格式 '%B - %Y' 转换回 '%Y-%m-%d'?

[英]How to convert Python date format '%B - %Y' back to '%Y-%m-%d'?

我正在使用包含 '%B - %Y' 格式的日期的数据框,需要将它们转换回日期时间 '%Y-%m-%d' 格式以便进行日期计算。

例如,我想将old_date = 'July - 2016'转换为一个新的日期变量new_date = '2016-07-15' ,在这里可以使用任意值(这里是一个月的 15 号)作为当天.

我第一次解决这个问题,它返回TypeError: unsupported operand type(s) for -: 'str' and 'str'

from datetime import datetime
df['new_date'] = datetime.strptime(str(df['old_date']), '%Y-%m-15')

编辑 ::

我没有做任何基准测试,但只是让您知道,将您的列转换为日期,这样做... df['your_column'] = pd.to_datetime(df['your_column'])会将您拥有的任何日期转换为ISO 格式。 请参阅下面的第二个示例。

不过,第二个示例应该更快。 :)

import pandas as pd
from datetime import datetime

data = {
    'A' : ['July - 2019', 'June - 2020'],
    'B' : [1, 2]
}

df = pd.DataFrame(data)
print(df, end='\n\n')
#              A  B
# 0  July - 2019  1
# 1  June - 2020  2

day_to_put = 15
df['A'] = df['A'].apply( lambda x: datetime.strptime(x, '%B - %Y')\
                                           .replace(day=day_to_put)\
                                           .strftime('%Y-%m-%d') )

print(df)
#            A  B
#0  2019-07-15  1
#1  2020-06-15  2

第二个例子

import pandas as pd
from datetime import datetime

data = {
    'A' : ['July - 2019', 'June - 2020'],
    'B' : [1, 2]
}

df = pd.DataFrame(data)
print(df, end='\n\n')
#              A  B
# 0  July - 2019  1
# 1  June - 2020  2

df['A'] = pd.to_datetime(df['A'])

print(df)
#             A  B
# 0  2019-07-01  1
# 1  2020-06-01  2

不整洁,但它应该工作:

months = {'January': '1',
          'Febuary': '2',
          'March': '3',
          'April': '4',
          'May': '5',
          'June': '6',
          'July': '7',
          'August': '8',
          'September': '9',
          'October': '10',
          'November': '11',
          'December': '12'}

def convert(old_date):
    pts = old_date.split(' - ')
    return '-'.join((pts[1], months[pts[0]], '15'))

解释:

  • months = {'January': '1', ...创建月份名称 → 数字字典
  • pts = old_date.split(' - ')将输入拆分为['July', '2016']
  • (pts[1], months[pts[0]], '15')一个元组,包含:
    • pts[1]第二个值(年)
    • months[pts[0]]在上述字典中查找第一个值(月份名称)
    • 15日,酌情更改
  • '-'.join(...)将上述元组的值与它们之间的-连接*1

*1请参阅String.join方法的纪录片。

您可以使用以下语法:

df['new_date'] = pd.to_datetime(df['old_date'],format='%b-%Y').dt.strftime('%Y-%m-%d')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM