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

Pandas修改JSON导入数据列名时df.rename失效的解决方法

问题根因

df.rename(columns={"data.datasets":"mydata"})执行后列名无变化,核心原因通常是以下两类:

  • pandas的rename方法默认返回修改后的新DataFrame,不会原地修改原对象,既没有将返回值赋值回原变量、也没加inplace=True参数时,修改不会生效
  • 列名实际值和你写的映射key不匹配:要么JSON导入后列名带不可见空格/特殊字符,要么嵌套JSON未完全扁平化时列是MultiIndex格式,key为元组而非点分隔字符串
解决步骤
  1. 先确认列名真实格式,避免匹配失败
    执行以下代码打印列名的原始格式,可识别隐藏空格、多级索引等问题:

    # 打印所有列的原始表示,可显示不可见的特殊字符/空格
    print([repr(col) for col in df.columns])
    
    • 如果输出中列名是'data.datasets'这类字符串格式,用普通字符串映射即可
    • 如果输出中列名是('data', 'datasets')这类元组格式,说明是多级列,映射时key要传入对应元组
    • 如果列名前后带空格比如' data.datasets ',把完整带空格的内容作为映射key即可
  2. 正确执行重命名操作
    两种写法二选一即可:

    # 写法1:将返回的新DataFrame赋值回原变量
    df = df.rename(columns={"data.datasets": "mydata"})
    
    # 写法2:加inplace参数原地修改
    df.rename(columns={"data.datasets": "mydata"}, inplace=True)
    

    如果是多级列的情况,替换映射key即可:

    df = df.rename(columns={("data", "datasets"): "mydata"})
    
  3. 附:优化后的完整处理代码(含冗余列清理)
    把重命名、删冗余列的步骤放到重采样前执行,逻辑更清晰,同时简化了冗余的日期处理写法:

    import pandas as pd
    
    # 日期列格式转换
    df["data.date"] = pd.to_datetime(df["data.date"])
    df["date"] = df["data.date"].dt.date
    df["date"] = pd.to_datetime(df["date"])
    
    # 重命名目标列、删除冗余的旧日期列
    df = df.rename(columns={"data.datasets": "mydata"})
    df = df.drop(columns=["data.date"])
    
    # 设置索引、按天重采样取每日第一条数据
    df = df.set_index('date').resample('d').first()
    
    # 筛选2022-05-05到2022-06-05的数据并打印
    print(df.loc['2022-05-05':'2022-06-05'])
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 08:21:25