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

使用Pandas复制DataFrame数据至新表时Excel输出为空的问题

问题排查与解决方案

代码中的核心问题

  • 空DataFrame初始化错误:你创建了空的out和out2,但未将原始df的数据赋值给out,导致后续遍历out.columns时无任何列可处理,自然不会复制数据。
  • 映射逻辑完全不匹配:映射规则里用的是i="1"、j="2",但原始列名后缀是42、43、44这类数字,条件if f"{mapping_key}{mapping_values['i']}" in column永远不会触发。
  • 语法错误:mappings字典中latitude的定义缺少闭合大括号,out2 = pd.DataFrame(columns=column_names_out2也缺少右括号,这些错误会直接导致代码运行失败。
  • 变量混淆:定义了含数据的df但未使用,反而基于空的out执行后续操作。

修复后的实现方案

手动映射(列数较少时)

如果列名对应关系明确,直接手动定义映射表:

import pandas as pd

# 原始数据
df = pd.DataFrame({
    'nodeBLocalCellId_42': ['A3', 'A0', 'B3'], 
    'configuredMaxTxPower_3G_43': [40000, 50000, 42000],
    'latitude_44': [40000, 50000, 42000],
    'nodeBLocalCellId_46': [40000, 50000, 42000],
    'configuredMaxTxPower_3G_47': [40000, 50000, 42000],
    'latitude_48': [40000, 50000, 42000]
})

# 定义原始列与目标列的对应关系
col_mapping = {
    'nodeBLocalCellId_42': 'nodeBLocalCellId_1',
    'configuredMaxTxPower_3G_43': 'configuredMaxTxPower_3G_1',
    'latitude_44': 'latitude_1',
    'nodeBLocalCellId_46': 'nodeBLocalCellId_2',
    'configuredMaxTxPower_3G_47': 'configuredMaxTxPower_3G_2',
    'latitude_48': 'latitude_2'
}

# 重命名列生成out2
out2 = df.rename(columns=col_mapping)

# 导出Excel(index=False避免写入行索引)
out2.to_excel('/path.xlsx', index=False)

批量自动映射(列数较多且规律时)

如果列是按每3组批量生成的(如原始后缀为42+3n、43+3n、44+3n,目标为_1、_2...),可以自动生成映射:

import pandas as pd

df = pd.DataFrame({
    'nodeBLocalCellId_42': ['A3', 'A0', 'B3'], 
    'configuredMaxTxPower_3G_43': [40000, 50000, 42000],
    'latitude_44': [40000, 50000, 42000],
    'nodeBLocalCellId_46': [40000, 50000, 42000],
    'configuredMaxTxPower_3G_47': [40000, 50000, 42000],
    'latitude_48': [40000, 50000, 42000]
})

# 批量生成列映射
col_mapping = {}
# 按每3列一组拆分原始列
groups = [df.columns[i:i+3] for i in range(0, len(df.columns), 3)]
for idx, group in enumerate(groups, start=1):
    for col in group:
        # 提取列名前缀(去掉最后的数字后缀)
        prefix = '_'.join(col.split('_')[:-1])
        col_mapping[col] = f"{prefix}_{idx}"

out2 = df.rename(columns=col_mapping)
out2.to_excel('/path.xlsx', index=False)

关键修复说明

  1. 基于真实数据操作:直接使用含数据的df,不再创建空的无效DataFrame。
  2. 精准列映射:确保原始列与目标列的对应关系完全匹配,避免无效条件判断。
  3. 使用pandas内置方法:rename方法比手动循环更高效且不易出错。
  4. 修复语法错误:确保所有字典、括号闭合,代码可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 09:53:13