[英]Suppressing scientific notation in pandas?
我在 pandas 中有一个 DataFrame,其中一些数字以科学记数法(或指数记数法)表示,如下所示:
id value
id 1.00 -4.22e-01
value -0.42 1.00e+00
percent -0.72 1.00e-01
played 0.03 -4.35e-02
money -0.22 3.37e-01
other NaN NaN
sy -0.03 2.19e-04
sz -0.33 3.83e-01
快速临时: df.round(4)
全局: pd.options.display.float_format = '{:20,.2f}'.format
您的数据可能是object
数据类型。 这是您数据的直接复制/粘贴。 read_csv
将其解释为正确的 dtype。 您通常应该只在类似字符串的字段上使用object
dtype。
In [5]: df = read_csv(StringIO(data),sep='\s+')
In [6]: df
Out[6]:
id value
id 1.00 -0.422000
value -0.42 1.000000
percent -0.72 0.100000
played 0.03 -0.043500
money -0.22 0.337000
other NaN NaN
sy -0.03 0.000219
sz -0.33 0.383000
检查您的数据类型是否为object
In [7]: df.dtypes
Out[7]:
id float64
value float64
dtype: object
这将此帧转换为object
dtype(注意现在打印很有趣)
In [8]: df.astype(object)
Out[8]:
id value
id 1 -0.422
value -0.42 1
percent -0.72 0.1
played 0.03 -0.0435
money -0.22 0.337
other NaN NaN
sy -0.03 0.000219
sz -0.33 0.383
这是如何将它转换回来( astype(float)
)在这里也有效
In [9]: df.astype(object).convert_objects()
Out[9]:
id value
id 1.00 -0.422000
value -0.42 1.000000
percent -0.72 0.100000
played 0.03 -0.043500
money -0.22 0.337000
other NaN NaN
sy -0.03 0.000219
sz -0.33 0.383000
这就是object
dtype 框架的样子
In [10]: df.astype(object).dtypes
Out[10]:
id object
value object
dtype: object
如果您想将值用作列表中的格式化字符串,例如作为 csvfile csv.writier 的一部分,则可以在创建列表之前对数字进行格式化:
df['label'].apply(lambda x: '%.17f' % x).values.tolist()
试试这个,它只会为大值和非常小的值提供科学记数法(并添加千位分隔符,除非你省略“,”):
pd.set_option('display.float_format', lambda x: '%,g' % x)
或者要在不损失精度的情况下几乎完全抑制科学记数法,请尝试以下操作:
pd.set_option('display.float_format', str)
无需四舍五入的快速修复:
pd.options.display.float_format = '{:.0f}'.format
我尝试了所有选项,例如
但没有什么对我有用。
所以在将变量\/值(var1)分配给变量(比如num1)时,我使用了round(val,5)。
这是一种粗略的方法,因为您必须在每个作业中使用此轮函数。 但这可以确保您控制它的发生方式并获得您想要的。"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.