Pandas导出Excel时字符串列出现‘数字以文本存储’警告的原因及解决
Pandas导出Excel出现“数字以文本存储”警告的原因及解决办法
警告产生的原因
你的DataFrame里这列虽然是Object类型且存的是字符串,但这些字符串的内容是纯数字(比如"123"、"456.78"这类)。Excel会自动检测单元格内容的特征,当它发现文本单元格里的内容符合数字格式时,就会弹出这个警告——本质是Excel在提示你“这个单元格存的是文本,但内容看起来像数字,是不是存错了?”。
另外,用xlsxwriter引擎导出时,Pandas默认不会给Object类型的列强制指定Excel的单元格格式,所以Excel会按自己的规则去识别内容,触发这个检测警告。
可以消除警告,三种解决方法:
方法1:导出时给目标列设置文本格式
用xlsxwriter的格式对象,把目标列的单元格格式强制设为文本,这样Excel就不会再识别成数字了:
writer = pd.ExcelWriter(filename, engine='xlsxwriter') df.to_excel(writer, index=False, sheet_name='Sheet1') workbook = writer.book worksheet = writer.sheets['Sheet1'] # 创建文本格式(@代表文本格式) text_format = workbook.add_format({'num_format': '@'}) # 获取目标列的索引(替换成你实际的列名) target_col_idx = df.columns.get_loc('你的目标列名') # 给该列应用文本格式 worksheet.set_column(target_col_idx, target_col_idx, None, text_format) writer.close()
方法2:提前将列转为String类型(Pandas 1.0+支持)
把原来的Object类型列转为Pandas专属的string类型,导出时xlsxwriter会明确按文本格式处理:
# 先转换列类型 df['你的目标列名'] = df['你的目标列名'].astype('string') # 再执行导出 writer = pd.ExcelWriter(filename, engine='xlsxwriter') df.to_excel(writer, index=False, sheet_name='Sheet1') writer.close()
方法3:关闭Excel的警告提示(不推荐)
这是客户端操作,打开Excel后依次点击「文件」→「选项」→「公式」,取消勾选「数字以文本形式存储时显示错误指示器」,但这种方法只是隐藏警告,并没有从根源上解决单元格格式的问题。
内容的提问来源于stack exchange,提问作者Pingpong
相关产品推荐
相关产品推荐

