You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas中如何重命名Unstack后数据表的列名(数字转星期)

解决DataFrame列名从数字改为星期名称的问题

问题分析

你之前用rename无效,大概率是因为列名是整数类型,但你用了字符串作为字典键(比如{'0':'Mon'}),导致无法匹配;而dt.day_name()顺序混乱,是因为生成的星期名顺序没对应0=周一到6=周日的映射逻辑。

解决方案

方案1:精准匹配整数列名的rename

直接用整数作为映射字典的键,确保和列名类型完全一致:

import pandas as pd

# 假设你的DataFrame名为df
weekday_map = {
    0: 'Mon',
    1: 'Tue',
    2: 'Wed',
    3: 'Thu',
    4: 'Fri',
    5: 'Sat',
    6: 'Sun'
}

# 执行重命名
df.rename(columns=weekday_map, inplace=True)

方案2:自动生成标准顺序的星期名

利用pandas日期工具生成从周一到周日的星期名,避免手动写映射出错:

# 2024-01-01是周一,以此为起始生成7天序列,提取的星期名正好是Mon到Sun
weekday_names = pd.date_range(start='2024-01-01', periods=7).day_name()

# 替换列名
df.columns = weekday_names

如果担心起始日期不是周一,可以动态获取最近的周一:

# 获取当前日期最近的周一作为起始
start_date = pd.Timestamp.today() - pd.Timedelta(days=pd.Timestamp.today().weekday())
weekday_names = pd.date_range(start=start_date, periods=7).day_name()
df.columns = weekday_names

方案3:仅修改指定整数列(如果有其他列存在)

如果你的DataFrame还有非整数列(比如示例中的Day列),可以只筛选整数列进行重命名:

# 筛选出列名为整数的列
int_cols = [col for col in df.columns if isinstance(col, int)]
# 生成对应星期名的映射
weekday_map = dict(zip(int_cols, ['Mon','Tue','Wed','Thu','Fri','Sat','Sun']))
# 执行重命名
df.rename(columns=weekday_map, inplace=True)

内容的提问来源于stack exchange,提问作者Mothy_Emms

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 21:55:30