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

Python中xlsxwriter写入Excel后pandas读取返回空DataFrame问题

问题原因分析

你遇到的空DataFrame问题,核心是写入位置和pandas读取逻辑不匹配:

  • 你用xlsxwriter把数据写到了Excel的第2行(对应代码里的row=1,xlsxwriter的行索引从0开始计数),而第1行(row=0)是空的。
  • pandas的read_excel()默认会把Excel的第1行(row=0)当作DataFrame的列名(表头),然后从第2行开始读取实际数据。但你的数据刚好在第2行,pandas误把这行数据当成了列名,后面没有真正的数据行,所以返回了空DataFrame。
解决方案

根据你的需求,有几种修复方式:

方式1:调整写入位置,从第1行开始写数据

把写入数据的起始行改为row=0,让数据占据Excel的第1行,同时读取时告诉pandas不需要表头:

import xlsxwriter
import pandas as pd

workbook = xlsxwriter.Workbook('arrays.xlsx')
worksheet = workbook.add_worksheet()
a = [[0.222333333333333, 0.048150492835172518, 'a12', 'a13', 'a11']]
print('writedata=',a)
row = 0  # 改为从第1行开始写入
for col, data in enumerate(a):
    worksheet.write_row(row, col, data)
workbook.close()

# 读取时指定header=None,表示没有表头
x = pd.read_excel('arrays.xlsx', header=None)
print('readdata=',x)

方式2:保留写入位置,读取时跳过空行并指定无表头

如果你不想修改写入代码,可以在读取时跳过空的第1行,同时指定用默认列名:

x = pd.read_excel('arrays.xlsx', header=None, skiprows=1)

方式3:添加表头,规范数据结构

如果你的数据需要表头,可以先写入表头到第1行,再把数据写到第2行,这样pandas就能正常识别:

import xlsxwriter
import pandas as pd

workbook = xlsxwriter.Workbook('arrays.xlsx')
worksheet = workbook.add_worksheet()
a = [[0.222333333333333, 0.048150492835172518, 'a12', 'a13', 'a11']]
print('writedata=',a)

# 先写入表头
worksheet.write_row(0, 0, ['数值1', '数值2', '文本1', '文本2', '文本3'])
# 再写入数据
row = 1
for col, data in enumerate(a):
    worksheet.write_row(row, col, data)
workbook.close()

# 正常读取即可
x = pd.read_excel('arrays.xlsx')
print('readdata=',x)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:21:28