从数字获取月份名称
- 2025-02-05 13:24:00
- admin 原创
- 75
问题描述:
如何从月份数字获取月份名称?
例如,如果我有3
,我想返回march
date.tm_month()
如何获取字符串march
?
解决方案 1:
import datetime
mydate = datetime.datetime.now()
mydate.strftime("%B")
退货时间:12 月
Python 文档网站上的更多信息
[编辑:@GiriB 的精彩评论]您还可以使用%b
它返回月份名称的简短表示法。
mydate.strftime("%b")
对于上面的例子,它将返回Dec
。
解决方案 2:
日历 API
由此可以看出calendar.month_name[3]
将返回March
,并且的数组索引0
是空字符串,因此也不必担心零索引。
解决方案 3:
import datetime
monthinteger = 4
month = datetime.date(1900, monthinteger, 1).strftime('%B')
print (month)
四月
解决方案 4:
如果您只需要知道给定数字(1 - 12)的月份名称,这没什么帮助,因为当前日期并不重要。
calendar.month_name[i]
或者
calendar.month_abbr[i]
在这里更有用。
以下是一个例子:
import calendar
for month_idx in range(1, 13):
print (calendar.month_name[month_idx])
print (calendar.month_abbr[month_idx])
print ("")
示例输出:
January
Jan
February
Feb
March
Mar
...
解决方案 5:
import datetime
mydate = datetime.datetime.now()
mydate.strftime("%B") # 'December'
mydate.strftime("%b") # 'dec'
解决方案 6:
要一次打印所有月份:
import datetime
monthint = list(range(1,13))
for X in monthint:
month = datetime.date(1900, X , 1).strftime('%B')
print(month)
解决方案 7:
如果您(像我一样)在 pandas 数据框中有一列月份数字,我会提供此信息:
df['monthName'] = df['monthNumer'].apply(lambda x: calendar.month_name[x])
解决方案 8:
一些好的 答案已经使用了日历,但尚未提及设置语言环境的效果。
日历根据当前语言环境设置月份名称,例如法语:
import locale
import calendar
locale.setlocale(locale.LC_ALL, 'fr_FR')
assert calendar.month_name[1] == 'janvier'
assert calendar.month_abbr[1] == 'jan'
如果您计划setlocale
在代码中使用,请务必阅读文档中的提示和注意事项以及扩展编写器部分。此处显示的示例并不代表应如何使用它。特别是从以下两个部分:
在某些库例程中调用 setlocale() 通常不是一个好主意,因为它的副作用会影响整个程序 [...]
扩展模块不应该调用 setlocale() […]
解决方案 9:
datetime
— 基本日期和时间类型 — Python 文档
所有 strftime 格式代码的列表。月份名称和诸如格式化左零填充之类的好东西。阅读整页以了解诸如“简单”参数的规则之类的内容。以下是简要列表:
%a Sun, Mon, …, Sat
%A Sunday, Monday, …, Saturday
%w Weekday as number, where 0 is Sunday
%d Day of the month 01, 02, …, 31
%b Jan, Feb, …, Dec
%B January, February, …, December
%m Month number as a zero-padded 01, 02, …, 12
%y 2 digit year zero-padded 00, 01, …, 99
%Y 4 digit Year 1970, 1988, 2001, 2013
%H Hour (24-hour clock) zero-padded 00, 01, …, 23
%I Hour (12-hour clock) zero-padded 01, 02, …, 12
%p AM or PM.
%M Minute zero-padded 00, 01, …, 59
%S Second zero-padded 00, 01, …, 59
%f Microsecond zero-padded 000000, 000001, …, 999999
%z UTC offset in the form +HHMM or -HHMM +0000, -0400, +1030
%Z Time zone name UTC, EST, CST
%j Day of the year zero-padded 001, 002, …, 366
%U Week number of the year zero padded, Days before the first Sunday are week 0
%W Week number of the year (Monday as first day)
%c Locale’s date and time representation. Tue Aug 16 21:30:00 1988
%x Locale’s date representation. 08/16/1988 (en_US)
%X Locale’s time representation. 21:30:00
%% literal '%' character.
解决方案 10:
我会这么做:
from datetime import *
months = ["Unknown",
"January",
"Febuary",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December"]
now = (datetime.now())
year = (now.year)
month = (months[now.month])
print(month)
它输出:
>>> September
(这是我写这篇文章的真实日期)
解决方案 11:
‘01’ 至 ‘Jan’
from datetime import datetime
datetime.strptime('01', "%m").strftime("%b")
解决方案 12:
您可以使用我的手动功能,而不必导入或下载新的库:
将代码复制到新的 .py 文件并运行
快速解释:
更改your_number并打印month_from_number,你将获得月份
your_number = 10
def num_to_month(*args, **kwargs):
num = kwargs.get("num", None)
if int(num) <= 12 and int(num) > 0:
list_of_months = {'1': 'January', '2': 'February', '3': 'March',
'4': 'April', '5': 'May', '6': 'June', '7': 'July',
'8': 'August', '9': 'September', '10': 'October',
'11': 'November', '12': 'December'}
return list_of_months[num]
else:
print('num_to_month function error: "num=' + str(num) + '"')
month_from_num = num_to_month(num=your_number)
print(month_from_num)
结果将是十月
解决方案 13:
对于任意范围的月份数字
month_integer=range(0,100)
map(lambda x: calendar.month_name[x%12+start],month_integer)
将产生正确的列表。start
从月份整数列表中一月的开始位置调整参数。
解决方案 14:
此脚本用于说明如何获取数据框中月份变量/列的日历月份缩写。请注意,假设月份列/变量的值都是数字,并且可能存在一些缺失值。
# Import the calendar module
import calendar
# Extract month as a number from the date column
df['Month']=pd.DatetimeIndex(df['Date']).month
# Using list comprehension extract month abbreviations for each month number
df['Month_abbr']=[calendar.month_abbr[int(i)] if pd.notna(i) else i for i in df['Month']]
解决方案 15:
如果您只有月份数字而没有日期时间实例,您可以构建一个小函数来映射带有标签的数字,如下所示:
def monthname(m):
d={1:'En',2:'Fe',3:'Mr',4:'Ab',5:'My',6:'Jn',7:'Jl',8:'Ag',9:'Se',10:'Oc',11:'No',12:'Di'}
return d[m]
解决方案 16:
是从关于生成月份名称列表的相关 SO 问题来到这里。
关于这个问题的许多选项,就像这个一样,建议使用日历模块,尽管使用日期时间列表理解也可以实现相同的效果:
month_names = [dt.datetime.strptime(str(n), '%m').strftime('%B') for n in range(1, 13)]
如果您从查找大量整数的月份名称的角度来解决这个问题,那么索引预先生成的列表可能会提高效率。
解决方案 17:
import datetime as dt
df['month_name'] = df['month'].dt.month_name()
这也许也有帮助。
如果你想最后三个字母。
df['month_name'] = df['month'].dt.month_name().str.slice(stop= 3)
解决方案 18:
我创建了自己的函数,将数字转换为相应的月份。
def month_name (number):
if number == 1:
return "January"
elif number == 2:
return "February"
elif number == 3:
return "March"
elif number == 4:
return "April"
elif number == 5:
return "May"
elif number == 6:
return "June"
elif number == 7:
return "July"
elif number == 8:
return "August"
elif number == 9:
return "September"
elif number == 10:
return "October"
elif number == 11:
return "November"
elif number == 12:
return "December"
然后我可以调用该函数。例如:
print (month_name (12))
输出:
>>> December