猿问

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

我正在尝试将月份名称更改为python中的日期,但即时通讯收到错误:


ValueError: time data 'October' does not match format '%m/%d/%Y'

我的CSV包含十月这样的值,我想将其更改为10/01/2018


import pandas as pd

import datetime


f = 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)

任何帮助,将不胜感激


holdtom
浏览 261回答 3
3回答

慕哥6287543

您不能只写一个映射到每个函数的函数吗?事实上,一本字典就可以了。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)

潇湘沐

通过@AdamSmith对答案的详细说明,定义名称和日期之间的映射的更好方法是使用calendar已经具有名称列表的模块:import calendartable = {name: datetime.datetime(month=1, day=val, year=2018)           for val, name in enumerate(calendar.month_name) if val>0}

繁星淼淼

传递一个格式字符串像整点%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。
随时随地看视频慕课网APP

相关分类

Python
我要回答