如何在Python中使用Pandas将数值以指数形式保存到CSV文件
如何在Python中使用Pandas将数值以指数形式保存到CSV文件
我明白你的困扰——明明控制台打印时数值是指数形式,存成CSV后就变回普通浮点数了对吧?问题出在你用的几个方法其实没真正控制写入CSV的格式,我来给你拆解问题,再给你修正后的代码。
首先,你用的pd.set_option('display.float_format', '{:.1E}'.format)只控制控制台的显示效果,完全不影响Pandas写入CSV时的数值格式,所以这步对存文件没用。另外你那行Datas_2 = Datas.astype(float, '{:.1E}'.format)的用法也是错的,astype()的第二个参数不是格式字符串,这个操作根本不会把数值转成指数格式。
要让CSV文件里真正保存指数形式的数值,核心是把浮点数列转换成带指数格式的字符串——因为CSV本质是纯文本文件,只有当你把数值以字符串的形式写入,才能完全控制它的显示格式,而不是让Pandas自动用默认的浮点数格式输出。
修正后的代码如下,我保留了你原来的逻辑,只改关键部分:
import pandas as pd # 读取Excel数据 Datas = pd.read_excel(Dateiname_Excel, sheet_name="Tabelle1", header=0) # 先处理"Pos"列转整数(和你原来的逻辑一致) Datas["Pos"] = Datas["Pos"].astype(int) # 筛选出所有浮点类型的列,把它们格式化为1位小数的指数形式字符串 float_columns = Datas.select_dtypes(include=['float64', 'float32']).columns Datas[float_columns] = Datas[float_columns].applymap(lambda x: '{:.1E}'.format(x)) # 写入CSV文件,这里不需要手动关闭文件,Pandas会自动处理 Datas.to_csv(Dateiname_CSV, index=None, header=HeaderList) # 打印确认结果 print(Datas)
给你解释下关键步骤:
- 用
select_dtypes自动筛选出所有浮点数列,避免手动写列名的麻烦; applymap(lambda x: '{:.1E}'.format(x))把每个浮点数转换成X.XE±XX格式的字符串;- 去掉了你多余的
CSV_File.close(),因为to_csv方法会自动管理文件的打开和关闭,手动关闭反而可能出错。
这样处理后,你打开CSV文件就能看到数值都是指数形式了,和你控制台打印的效果一致。
备注:内容来源于stack exchange,提问作者Fivomat
相关产品推荐
相关产品推荐

