Python代码问题:月份显示为1-12数字而非月份名称
解决月份列显示数字而非名称的问题
你的问题出在DataFrame的列名初始设置为月份数字,后续循环仅修改了单元格内容,并未更改列名,所以表头始终显示1-12的数字。以下是修正方案:
核心修改点
直接将df1的列名替换为月份缩写或全称,无需多余的单元格赋值循环(你原代码中两次给单元格写月份名称的循环可以删除,因为最后会被收益率覆盖)。
修正后的完整代码(英文月份缩写)
import pandas as pd from datetime import datetime start_date = '2023-01-01' end_date = '2023-12-31' dates_2023 = pd.date_range(start=start_date, end=end_date) # 生成英文月份缩写作为列名(如Jan、Feb) month_names = [datetime(2023, num, 1).strftime('%b') for num in dates_2023.month.unique()] df1 = pd.DataFrame(index=range(1, 32), columns=month_names) # 保留你的分组计算逻辑 df_grouped = df.groupby([df.index.month, df.index.day]).mean() for index, row in df_grouped.iterrows(): month_num, day = index # 根据月份数字匹配对应的缩写列名 month_col = datetime(2023, month_num, 1).strftime('%b') df1.loc[day, month_col] = row['Daily_returns'] df1
补充:如果需要中文月份名称
把生成列名的部分改成中文映射即可:
import pandas as pd start_date = '2023-01-01' end_date = '2023-12-31' dates_2023 = pd.date_range(start=start_date, end=end_date) # 中文月份名称列表 cn_month_names = ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'] # 按月份数字顺序获取对应中文名称 month_names = [cn_month_names[num-1] for num in dates_2023.month.unique()] df1 = pd.DataFrame(index=range(1, 32), columns=month_names) # 分组循环中匹配中文列名 df_grouped = df.groupby([df.index.month, df.index.day]).mean() for index, row in df_grouped.iterrows(): month_num, day = index month_col = cn_month_names[month_num-1] df1.loc[day, month_col] = row['Daily_returns'] df1
这样你的DataFrame表头就会显示月份名称而非数字了。
内容的提问来源于stack exchange,提问作者muhammad fairuzi
相关产品推荐
相关产品推荐

