为了账号安全,请及时绑定邮箱和手机立即绑定

在Python中将月份名称更改为日期

在Python中将月份名称更改为日期

holdtom 2021-05-30 21:22:13
我正在尝试将月份名称更改为python中的日期,但即时通讯收到错误:ValueError: time data 'October' does not match format '%m/%d/%Y'我的CSV包含十月这样的值,我想将其更改为10/01/2018import pandas as pdimport datetimef = pd.read_excel('test.xlsx', 'Sheet1', index_col=None)keep_col = ['Month']new_f = f[keep_col]f['Month'] = f['Month'].apply(lambda v: datetime.datetime.strptime(v, '%m/%d/%Y'))    new_f.to_csv("output.csv", index=False)任何帮助,将不胜感激
查看完整描述

3 回答

?
慕哥6287543

TA贡献1831条经验 获得超10个赞

您不能只写一个映射到每个函数的函数吗?事实上,一本字典就可以了。


def convert_monthname(monthname):

    table = {"January": datetime.datetime(month=1, day=1, year=2018),

             "February": datetime.datetime(month=2, day=1, year=2018),

             ...}


    return table.get(monthname, monthname)


f['Month'] = f['Month'].apply(convert_monthname)


查看完整回答
反对 回复 2021-06-01
?
潇湘沐

TA贡献1816条经验 获得超6个赞

通过@AdamSmith对答案的详细说明,定义名称和日期之间的映射的更好方法是使用calendar已经具有名称列表的模块:


import calendar

table = {name: datetime.datetime(month=1, day=val, year=2018) 

          for val, name in enumerate(calendar.month_name) if val>0}


查看完整回答
反对 回复 2021-06-01
?
繁星淼淼

TA贡献1775条经验 获得超11个赞

传递一个格式字符串像整点%m/%d/%y到strftime是你指定什么格式的输入串将是英寸


您可以查看文档,但是很显然,like这样的格式%m/%d/%y不会处理like这样的字符串'October'。您需要一个(以零填充的)月份数、一个斜杠、一个(以零填充的)日数、一个斜杠和一个(以零填充的)(两位数)年份。


如果指定实际的格式不匹配您的输入,一切工作没有错误:


>>> datetime.datetime.strptime('October', '%B')

datetime.datetime(1900, 10, 1, 0, 0)

但是,这仍然不是您想要的,因为默认年份是1900,而不是2018。因此,您需要这样做replace,或者拉出月份并构建新的datetime对象。


>>> datetime.datetime.strptime('October', '%B').replace(year=2018)

datetime.datetime(2018, 10, 1, 0, 0)

另外,请注意,所有strptime知道的字符串都是特定于语言环境的。如果您设置了说英语的语言环境(如en_US.UTF-8或)C,则%B表示英语月份,因此一切都很好。但是,如果您已设置,例如,br_PT.UTF-8,那么您是在要求它匹配巴西葡萄牙语月份名称,例如Outubro代替October。


查看完整回答
反对 回复 2021-06-01
  • 3 回答
  • 0 关注
  • 260 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信