3 回答
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)
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}
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。
添加回答
举报