Pandas ExcelWriter导出Excel丢失有效NaN值及定向保留方案咨询
问题根因
pandas调用read_json接口时会默认将JSON中的字符串"NaN"自动识别为pandas空值类型NaN,调用to_excel导出时默认空值对应空白单元格,因此会出现NaN值丢失的现象。
基础解决方案:全列保留NaN显示
仅需要在to_excel方法中添加na_rep参数,指定空值的导出展示内容即可,修改对应代码行:
# 原代码 # df.to_excel(writer, header=True, sheet_name='Pandas_Test',index=False) # 修改后代码 df.to_excel(writer, header=True, sheet_name='Pandas_Test',index=False, na_rep='NaN')
添加参数后所有空值都会导出为字符串NaN,不会出现空白单元格。
进阶解决方案:指定列定向保留NaN显示
如果仅需要部分列保留NaN显示、其他列空值仍保持空白,可提前对目标列的空值做替换处理,不需要添加na_rep参数,操作示例:
# 定义需要保留NaN的列列表 keep_nan_cols = ['triggered_value'] # 仅替换目标列的空值为字符串"NaN" for col in keep_nan_cols: df[col] = df[col].fillna('NaN') # 导出时不需要加na_rep参数 df.to_excel(writer, header=True, sheet_name='Pandas_Test',index=False)
如果需要保留原数据的类型不受影响,可复制副本做导出处理:
export_df = df.copy() keep_nan_cols = ['triggered_value'] for col in keep_nan_cols: export_df[col] = export_df[col].fillna('NaN') export_df.to_excel(writer, header=True, sheet_name='Pandas_Test',index=False)
内容的提问来源于stack exchange,提问作者D Chase
相关产品推荐
相关产品推荐

