在 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 中使用多索引标题读取 excel 时选择列