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
相关产品推荐
相关产品推荐

