如何将Python、pandas、numpy输出转换为Excel文件?附输出示例
把Python/Pandas/Numpy输出转成带完整格式的Excel文件解决方案
没问题,这就给你一套能完美保留所有技术术语、数字格式和特殊符号的实现方案——用Pandas就能轻松搞定,它处理Excel导出的能力相当靠谱。下面是分步操作:
1. 确保数据是Pandas DataFrame格式
如果你的输出是控制台打印的文本(像你提供的那样),先把它转成DataFrame;如果已经是DataFrame,直接跳过这步。这里我把你给出的输出内容构造为DataFrame示例:
import pandas as pd # 构造和你输出一致的DataFrame data = { "Unnamed: 0": [ "Przychody netto ze sprzedaży (tys. zł)", "Zysk (strata) z działal. oper. (tys. zł)", "Zysk (strata) brutto (tys. zł)", "Zysk (strata) netto (tys. zł)*", "Amortyzacja (tys. zł)", "EBITDA (tys. zł)", "Aktywa (tys. zł)", "Kapitał własny (tys. zł)*", "Liczba akcji (tys. szt.)", "Zysk na akcję (zł)" ], "IV Q 2016": [ "8 078", "-15 386", "-16 300", "-8 500", "-1 059", "-16 445", "112 657", "1 127", "44 260,410", "-0,19" ], "I Q 2017": [ "8 877", "-562", "-723", "-707", "1 191", "629", "152 271", "47 725", "44 260,410", "-0,02" ] } df = pd.DataFrame(data)
2. 处理数字格式并导出到Excel
你的数据里数字用空格做千分位分隔、逗号做小数点,直接导出会丢失格式,所以要先把字符串转成数值,再设置Excel单元格格式来还原显示效果:
第一步:转换数值类型
先把带空格和逗号的字符串转成Pandas能识别的数值:
# 指定数值列 numeric_cols = ["IV Q 2016", "I Q 2017"] # 去除空格,把逗号替换成点,转成float类型 for col in numeric_cols: df[col] = df[col].str.replace(" ", "").str.replace(",", ".").astype(float)
第二步:导出并设置Excel格式
用ExcelWriter配合openpyxl引擎来设置单元格格式,确保导出后和原始输出的显示一致:
# 先安装openpyxl(如果没装的话):pip install openpyxl with pd.ExcelWriter("financial_report.xlsx", engine="openpyxl") as writer: # 导出DataFrame到Excel,不包含索引 df.to_excel(writer, index=False, sheet_name="Finansowe dane") # 获取工作簿和工作表对象 workbook = writer.book worksheet = writer.sheets["Finansowe dane"] # 定义需要的数字格式:千分位用空格,小数点用逗号,保留三位小数(可根据需求调整) custom_num_format = workbook.add_format({ "num_format": "# ##0,000", "align": "right" }) # 给数值列应用格式,同时设置列宽 for col in numeric_cols: # openpyxl的列索引从1开始,所以要加1 col_idx = df.columns.get_loc(col) + 1 worksheet.set_column(col_idx, col_idx, width=16, cell_format=custom_num_format) # 调整第一列的宽度,让长文本完整显示 worksheet.set_column(0, 0, width=45)
3. 验证导出结果
打开生成的financial_report.xlsx,你会看到:
- 所有技术术语(如EBITDA、Kapitał własny)和特殊符号(如*)都完整保留
- 数字显示和原始输出完全一致:千分位用空格分隔,小数点用逗号(比如
44 260,410) - 负数格式也正确显示
额外注意事项
- 如果你的原始数据已经是DataFrame(不是控制台文本),直接跳过构造DataFrame的步骤即可
- 要是需要更复杂的格式(比如字体、单元格颜色),可以扩展
add_format的参数,比如"font_name": "Arial", "font_size": 10 - 确保你安装了
openpyxl,它是Pandas写入.xlsx文件的依赖引擎
内容的提问来源于stack exchange,提问作者Tmiskiewicz




