Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
格式化/抑制Python聚合结果中的科学符号_Python_Pandas_Floating Point_Scientific Notation_Number Formatting - Fatal编程技术网

格式化/抑制Python聚合结果中的科学符号

格式化/抑制Python聚合结果中的科学符号,python,pandas,floating-point,scientific-notation,number-formatting,Python,Pandas,Floating Point,Scientific Notation,Number Formatting,如何修改pandas中groupby操作的输出格式,该操作生成大量数字的科学符号 我知道如何在python中进行字符串格式化,但在这里应用它时,我不知所措 df1.groupby('dept')['data1'].sum() dept value1 1.192433e+08 value2 1.293066e+08 value3 1.077142e+08 如果我转换成字符串,这会抑制科学符号,但现在我只是想知道如何设置字符串格式和添加小数 sum_sales

如何修改pandas中groupby操作的输出格式,该操作生成大量数字的科学符号

我知道如何在python中进行字符串格式化,但在这里应用它时,我不知所措

df1.groupby('dept')['data1'].sum()

dept
value1       1.192433e+08
value2       1.293066e+08
value3       1.077142e+08
如果我转换成字符串,这会抑制科学符号,但现在我只是想知道如何设置字符串格式和添加小数

sum_sales_dept.astype(str)

诚然,我在评论中链接的答案并不是很有帮助。您可以像这样指定自己的字符串转换器

In [25]: pd.set_option('display.float_format', lambda x: '%.3f' % x)

In [28]: Series(np.random.randn(3))*1000000000
Out[28]: 
0    -757322420.605
1   -1436160588.997
2   -1235116117.064
dtype: float64
我不确定这是否是最好的方法,但它是有效的

纯粹出于审美目的将数字转换为字符串似乎是个坏主意,但如果您有充分的理由,这是一种方法:

In [6]: Series(np.random.randn(3)).apply(lambda x: '%.3f' % x)
Out[6]: 
0     0.026
1    -0.482
2    -0.694
dtype: object

下面是另一种方法,类似于但没有lambda函数:

>>> pd.options.display.float_format = '{:.2f}'.format
>>> Series(np.random.randn(3))
0    0.41
1    0.99
2    0.10


如果要使用这些值,例如作为csvfile csv.writer的一部分,则可以在创建列表之前格式化这些数字:

df['label'].apply(lambda x: '%.17f' % x).values.tolist()

您可以使用round函数来抑制特定数据帧的科学符号:

df1.round(4)
或者,您可以通过以下方式全局抑制:

pd.options.display.float_format = '{:.4f}'.format

如果要在jupyter笔记本单元中设置数据帧输出的样式,可以基于每个数据帧设置显示样式:

df = pd.DataFrame({'A': np.random.randn(4)*1e7})
df.style.format("{:.1f}")


请参阅文档。

我有多个具有不同浮点的数据帧,因此thx to Allans idea制作了动态长度

pd.set_option('display.float_format', lambda x: f'%.{len(str(x%1))-2}f' % x)

负的是,如果你在浮动中有最后一个0,它会将其削减。因此,它不是0.000070,而是0.00007。

在全局范围内设置固定的小数位数通常是个坏主意,因为它不太可能是所有显示的各种数据的适当小数位数,无论大小。相反,请尝试此方法,它将仅为大值和非常小的值提供科学的表示法(并添加数千分隔符,除非省略“,”):

或者,为了在不损失精度的情况下几乎完全抑制科学符号,请尝试以下方法:

pd.set_option('display.float_format', str)

我看到了那个问题,但我不确定这对我有什么帮助。我只是想保留当前的数据类型,即float,并简单地显示结果中的所有小数,而不是科学记数法。这可能只是一种显示。但是如果你认为你的问题有什么特别之处,使你的问题与Dan链接中的问题不同,那么你需要发布更多关于你的问题的信息,最好是用一个小数据集来重现问题。还有,您的结果的
d类型是什么?谢谢Dan。你知道如何重置pandas选项吗?@Josh要在pandas中临时设置选项,可以使用
pandas.option\u context
(请参阅)。这通常不是为了美观,而是为了通过视觉皮层在大型数字数据帧上快速浏览信息。pd.set\u选项('display.float\u format',lambda x:'%0.3f x')为我工作的tooThis工作,您也可以使用较新的f字符串表示法。类似于
pd.set_选项('display.float_format',lambda x:f'{x:,.3f}')
,如果您还需要1000个分隔符的话。我认为对于不太熟悉Python的团队成员来说,使用格式字符串会更容易,并且可能不理解lambda函数。到目前为止,这是最容易被忽视的答案之一。
pd.set_option('display.float_format', lambda x: '%,g' % x)
pd.set_option('display.float_format', str)