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
相关产品推荐
相关产品推荐

