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

Python Pandas如何仅复制列名行索引到新DataFrame不携带原始数据

Pandas 生成目标空DataFrame及逐小时变化率计算方案

报错原因说明

你运行代码报错的原因是pd.DataFrame.rename()的index参数要求传入索引旧值到新值的映射字典或可调用对象,你直接传入列名的Index对象,Pandas尝试将其作为可调用对象执行,因此抛出'Index' object is not callable错误,且该段代码逻辑也不符合生成目标空DataFrame的需求。

空output_data生成方法

以下方案性能可轻松支撑数千条数据的处理需求,生成的output_data和原data列名一致、保留Name列的全部取值,其余数值列留空可供后续填充:

import pandas as pd

# 方式1:拷贝原data结构后清空数值列,适合需要保留原数据索引的场景
output_data = data.copy()
# 除Name列外其余列置为空值,也可根据需求替换为空字符串''
output_data.loc[:, output_data.columns != 'Name'] = pd.NA

# 方式2:轻量生成新DataFrame,无需拷贝原数值,内存占用更低
output_data = pd.DataFrame(columns=data.columns)
output_data['Name'] = data['Name']

直接计算逐小时变化率的参考实现

如果你不需要提前留空,可以直接通过以下代码一步得到示例中的最终output_data结果:

# 提取所有数值列(排除Name列)
value_cols = data.columns.drop('Name')
# 按行计算环比变化率,乘以100转为百分比数值
pct_data = data[value_cols].pct_change(axis=1, fill_method=None) * 100
# 首个时间节点的变化率固定为0%
pct_data.iloc[:, 0] = 0
# 格式化为带正负号的百分比字符串,拼接Name列得到最终结果
output_data = data[['Name']].join(pct_data.applymap(lambda x: f"{x:+g}%" if pd.notna(x) else ""))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 15:36:04