将 Pandas 系列日期时间“月份”数字转换为月份文本 [重复]

Posted

技术标签:

【中文标题】将 Pandas 系列日期时间“月份”数字转换为月份文本 [重复]【英文标题】:converting Pandas series datetime "month" number to the month text [duplicate] 【发布时间】:2020-08-18 23:27:01 【问题描述】:

我无法将 pandas 中的月份数字转换为整数或数字。

我给。为了便于查看,我已经尝试了所有我能想到的将熊猫月份编号转换为月份名称的方法。我得到错误。我曾尝试将 month_name 用于 pandas 系列,创建月份数字和月份名称的字典(给出错误),我可以将系列转换为字符串但不是 int,我创建了一个单独的元组,似乎没有任何效果。

我意识到我需要将系列(我可以用来做数学运算)转换为数字。

使用熊猫系列月份名称给了我这个:

<bound method Pandas Delegate._add_ delegate accessors.<locals>._create_delegator_method.<locals>.f of <pandas.core.indexes.accessors.DatetimeProperties object at 0x000001F8A776D0F0>>

虽然不是错误,但也没有用。

使用我的元组我得到以下错误:元组索引必须是整数或切片,而不是系列。我得到了这个,因为如果不是尝试某种方式将系列转换为整数,它会很好地工作,这会给出“无法将系列转换为 。”

'''
creating a tuple of month numbers
'''
num_to_month = ('tuple of months in order','January', 'February', 'March', 'Apil', 'May',
                'June', 'July', 'August', 'September', 'October', 'November', 'December')

'''
create list of new forecasts
'''
files_to_process = sorted(glob('*CAH_KEY_STRATEGY_DOC*.xlsx'))
print(files_to_process)

'''
update the files to process to add the fiscal quarter info and save back to same name
'''
for file in files_to_process:
    df = pd.read_excel(file)
    df.fillna(0, inplace=True)
    df['fiscal_yr_qtr'] = pd.PeriodIndex([date - pd.tseries.offsets.DateOffset(days=1) + pd.tseries.offsets.FY5253Quarter(normalize=True, weekday=4,startingMonth=4, qtr_with_extra_week=1, variation='last') for date in df.task_date], freq='Q-APR')
    df['month'] = df.task_date.dt.month
    # y = df['month'].to_int
    # print(y)
    # z= int(y)
    # print(y)
    df['year'] = df.task_date.dt.year
    df['day'] = df.task_date.dt.day
    df['fiscal_qtr'] = pd.PeriodIndex([date - pd.tseries.offsets.DateOffset(days=1) + pd.tseries.offsets.FY5253Quarter(normalize=True, weekday=4,startingMonth=4, qtr_with_extra_week=1, variation='last') for date in df.task_date], freq='Q-APR').quarter
    df.loc[((df.task_date.dt.month >= 5) | ((df.task_date.dt.month == 4) & (df['fiscal_qtr'] == 1))), 'fiscal_yr'] = df.task_date.dt.year + 1
    df.loc[((df.task_date.dt.month <= 4) & (df['fiscal_qtr'] != 1)), 'fiscal_yr'] = df.task_date.dt.year
    df['total_expenses'] = df['costs'] + df['3rd_prty']
    df['total_spend'] = df['fees'] + df['costs'] + df['3rd_prty']
    # df['month_name'] = df.task_date.dt.month_name #added 8/18/2020
    # df['month_name'] = num_to_month[y] # this gives september
    df.to_excel(file, index=False)
    with pd.ExcelWriter('output.xlsx', datetime_format='YYYY-MM-DD HH:MM:SS') as writer:
        df.to_excel(writer, sheet_name='Sheet_name_1')

【问题讨论】:

df.task_date.dt.month_name() 【参考方案1】:

如果您的日期是日期时间格式: df["Date"] = pd.to_datetime(df["Date"],format="%y-%m-%d %H:%M:%S") 您可以根据需要直接更改格式。月份名称格式为 %B 检查文档: https://stackabuse.com/how-to-format-dates-in-python/ 如果您想要其他包含此信息的列,只需使用 df["Date_2"] = df["Date"].dt.strftime('%d-%b-%Y')

【讨论】:

以上是关于将 Pandas 系列日期时间“月份”数字转换为月份文本 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

仅在 Pandas 中将日期时间转换为月份和年份 [重复]

在python pandas df中将月份数转换为名称

使用 Grouper 的 pandas 系列日期时间索引中的月份名称

如何将整数转换为月和年格式

在Python里 请问怎么将数字日期转换成英文月份加数字日期? 并且替换分隔符?例子如下

php 获取开始日期与结束日期之间所有月份