使用nbconvert转Notebook为HTML时utf-8解码0xd7错误如何解决
解决方案
方案1:修改pandas默认的多级表头拼接分隔符(根源解决)
报错提到的乘号×是pandas生成MultiIndex多级列名时默认使用的分隔符,直接全局替换默认值即可彻底避免该字符生成:
import pandas as pd # 全局设置多级索引拼接时的分隔符为x,替换默认的× pd.set_option('display.multi_sparse', False) pd.set_option('styler.format.multi_level_sep', ' x ') # 老版本pandas使用下方配置即可 pd.set_option('display.multiindex_sep', ' x ')
配置生效后,所有DataFrame的多级表头拼接都会自动用ASCII字符x代替乘号,后续转换不会再出现非ASCII字符解码问题。
方案2:单次批量替换现有DataFrame的特殊字符
如果不想修改全局配置,可以针对单个DataFrame的列名做定向替换:
# 单层表头替换写法 df.columns = df.columns.str.replace('×', 'x', regex=False) # 多级表头替换写法 df.columns = pd.Index([str(c).replace('×', 'x') for c in df.columns])
替换完成后再调用IPython展示接口即可。
方案3:直接指定nbconvert的编码参数(无需修改Notebook代码)
如果不想调整现有业务代码,执行转换命令时指定兼容编码即可规避解码报错:
jupyter nbconvert --to html your_notebook.ipynb --encoding=gbk
也可以直接修改nbconvert全局配置文件固定默认编码,不用每次执行命令加参数。
内容的提问来源于stack exchange,提问作者Michael Bay
相关产品推荐
相关产品推荐

