[英]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.