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

如何将含FactSet XML数据的XLSX文件转为Pandas DataFrame?

处理含FactSet XML数据的XLSX转Pandas DataFrame问题

问题分析

你遇到的空DataFrame报错,是因为目标工作表里只有FactSet的XML数据提示文本,没有实际结构化数据;即使重新保存,文件可能仍残留FactSet的元数据干扰读取。以下是几种可行的解决方法:


方法1:确认并读取实际数据工作表

FactSet生成的文件通常会把XML数据和实际数据放在不同工作表里,先排查所有工作表:

import pandas as pd

# 列出文件中所有工作表名称
xls = pd.ExcelFile('Basecopy.xlsx')
print(xls.sheet_names)

# 选择输出结果中对应实际数据的工作表(比如名称为"Data"的表)
df = pd.read_excel('Basecopy.xlsx', sheet_name="Data")
print(df)

方法2:跳过提示行读取有效数据

如果实际数据和提示文本在同一个工作表,只是提示行在顶部,用skiprows跳过无关行:

import pandas as pd

# 跳过第一行提示文本,从第二行开始读取
df = pd.read_excel('Basecopy.xlsx', sheet_name=0, skiprows=1)
# 若提示占多行,可调整skiprows参数(比如skiprows=3跳过前3行)

# 保存时去掉索引避免生成Unnamed列
df.to_excel('baseactivos2.xlsx', index=False)
df2 = pd.read_excel('baseactivos2.xlsx')
print(df2)

方法3:精准读取单元格范围

如果数据集中有大量空行或不规则格式,用openpyxl直接指定读取区域:

from openpyxl import load_workbook
import pandas as pd

wb = load_workbook('Basecopy.xlsx')
ws = wb.active

# 从第2行开始读取所有非空行(根据实际情况调整min_row)
data_rows = []
for row in ws.iter_rows(min_row=2, values_only=True):
    # 跳过全空的行
    if any(cell is not None and cell != '' for cell in row):
        data_rows.append(row)

# 转为DataFrame,假设第1行(原A1)是列名
df = pd.DataFrame(data_rows[1:], columns=data_rows[0])
print(df)

方法4:手动导出为CSV再读取

如果代码方法仍有问题,手动处理更直接:

  1. 打开原XLSX文件,选中包含实际数据的单元格区域
  2. 复制到新的空白工作表,删除所有提示文本和空行
  3. 将新工作表另存为CSV格式
  4. 用Pandas读取CSV:
df = pd.read_csv('cleaned_data.csv')
print(df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 16:57:11