在 Excel 中查看时,pandas to_excel() 方法强制对 int64 列使用科学记数法

Posted

技术标签:

【中文标题】在 Excel 中查看时,pandas to_excel() 方法强制对 int64 列使用科学记数法【英文标题】:pandas to_excel() method forces scientific notation on int64 columns when viewed in Excel 【发布时间】:2018-11-06 01:06:20 【问题描述】:

我正在使用此代码将数据框保存到 excel:

    writer = pd.ExcelWriter(self.file_name, engine='openpyxl')
    writer.book = workbook
    writer.sheets = dict((ws.title, ws) for ws in workbook.worksheets)
    df.to_excel(writer, sheet_name=sheet_name, columns=columns, header=True, index=False, startrow=11, startcol=0)
    writer.save()

不幸的是,任何具有大 int64 dtype 的列都看起来像这样:

在 Pandas 中,我通过执行以下操作来抑制科学记数法:

pd.set_option('display.float_format', lambda x: '%.f' % x) 
pd.set_option('display.precision', 0)

所以当我打印数据框时,int64 列看起来像这样:

我尝试将列转换为 str 类型,如下所示:

    def convert_int_cols_to_str(df):
        dtypes = df.dtypes
        for col, dtype in dtypes.iteritems():
            if dtype == 'int64':
                df[col] = df[col].astype(str)

在此应用后,这些列的 dtypes 显示为 object 而不是 int64,但在 Excel 中仍以科学记数法显示。 任何有关如何避免这种情况的想法将不胜感激!

以下是我正在使用的相关包的版本:

openpyxl==2.5.9
pandas==0.20.3

【问题讨论】:

【参考方案1】:

哇对不起大家。原来我在脚本中的错误点应用了 dtype 转换。我上面描述的方法实际上可以完美地抑制 Excel 中 int64 列的科学记数法。我会留下这个问题,以防它帮助其他人。

【讨论】:

pd.set_option('display.float_format', lambda x: '%.f' % x) pd.set_option('display.precision', 0)这两行可以和import语句放在一起。实际上我在很多列中都面临这个问题,但是我的列都是 float 和 NaN 的组合,所以我无法转换为 int64

以上是关于在 Excel 中查看时,pandas to_excel() 方法强制对 int64 列使用科学记数法的主要内容,如果未能解决你的问题,请参考以下文章

pandas.read_excel,第一行值

使用 pandas 读取 excel 时精度损失

在 Pandas 中使用多索引标题读取 excel 时选择列

Python:当文件在列标题中有特殊字符时,使用 Pandas 读取 Excel 文件

使用 Pandas 在 Excel 中写入百分比

在写入Excel时,“解析”一个pandas多索引