是否有一种功能可以在维持我的订单的同时将我的数字在 pandas 中四舍五入?

Posted

技术标签:

【中文标题】是否有一种功能可以在维持我的订单的同时将我的数字在 pandas 中四舍五入?【英文标题】:Is there a function that will round my numbers in pandas whilst maintaining my orders? 【发布时间】:2019-10-28 21:18:58 【问题描述】:

我使用 pandas 创建了一个数据框,并且我的数字在 e-18 等的权力范围内。正如预期和期望的那样。但是,我所有的数字都四舍五入到小数点后 6 位,我想将其减少到 5 d.p.

我已尝试按照建议使用 round() 函数,但这会将我的所有最小值四舍五入为 0.0。例如,我想要 1.23456e-19 的格式。

data = 'n':n, 'Electron O.Radius (m)|':lithiumorbit (n,me), 
        'Muon O.Radius (m)|':lithiumorbit (n,mmuon), 'Electron Wavelength (m)|':lithiumλ (n,me),
       'Muon Wavelength (m)|':lithiumλ (n,mmuon), 'Electron Energy (eV)|':lithiumUn (n,me)*(6.242e18),
       'Muon Energy (eV)|':lithiumUn (n,mmuon)*(6.242e18), 'Excited Photon Emission (eV)|':Photonemit,
       'Excited Muon Emission (eV)|':Muonemit
df_=pd.DataFrame(data)
df_.set_index('n', inplace=True)

后续输出为:

Electron O.Radius(m)|Muon O.Radius (m)| Electron Wavelength(m)| 
 \
n                                                                          
1             1.763836e-11        8.530499e-14              1.108251e-10   
2             7.055344e-11        3.412200e-13              2.216502e-10   
3             1.587452e-10        7.677449e-13              3.324752e-10   
4             2.822137e-10        1.364880e-12              4.433003e-10   
5             4.409590e-10        2.132625e-12              5.541254e-10   
6             6.349809e-10        3.070980e-12              6.649505e-10   
7             8.642796e-10        4.179945e-12              7.757755e-10   
8             1.128855e-09        5.459520e-12              8.866006e-10   
9             1.428707e-09        6.909704e-12              9.974257e-10   
10            1.763836e-09        8.530499e-12              1.108251e-09   
11            2.134241e-09        1.032190e-11              1.219076e-09   
12            2.539924e-09        1.228392e-11              1.329901e-09   
13            2.980883e-09        1.441654e-11              1.440726e-09   
14            3.457118e-09        1.671978e-11              1.551551e-09   
15            3.968631e-09        1.919362e-11              1.662376e-09   
16            4.515420e-09        2.183808e-11              1.773201e-09   
17            5.097486e-09        2.465314e-11              1.884026e-09   
18            5.714828e-09        2.763882e-11              1.994851e-09   
19            6.367448e-09        3.079510e-11              2.105676e-09   
20            7.055344e-09        3.412200e-11              2.216502e-09

根据需要,但一位数太多了。

【问题讨论】:

我同意,这就是我所做的,我希望“修复”显示方面,因为 pandas 以这种方式格式化了我的数据,我的印象是它可以改变. 【参考方案1】:

设置显示选项:

pd.options.display.float_format = ':,.5e'.format

然后打印(df_)。当然,这只改变了显示格式。 在内部,所有数字都保持“通常”的精度。

替代方案

要以单独的格式显示每一列,您可以使用以下内容:

df.style.format(
    'var1': ':,.2f'.format,
    'var2': ':,.2f'.format,
    'var3': ':,.2%'.format,
)

根据您的需要设置列名及其格式。

【讨论】:

@Valdi_Bo 整洁的解决方案!有没有办法做到这一点,但对不同的列保持不同的格式?【参考方案2】:

您可以使用pandas.DataFrame.round() 执行以下操作。

import pandas as pd
# df is your dataframe
# keeping 5 places after the decimal for all columns
df.round(5)

# keeping different number of places after the decimal
# This will enforce 5, 6, 7 places after decimal for the following columns.
df.round('Electron O.Radius(m)|': 5,'Muon O.Radius (m)|': 6,'Electron Wavelength(m)|': 7)

【讨论】:

以上是关于是否有一种功能可以在维持我的订单的同时将我的数字在 pandas 中四舍五入?的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中舍入到给定的数字

VS 2022 - 在所有文件中转换为文件范围的命名空间

如何在 Objective-C 中保存图像列表

是否可以让表格将我的 REGEXEXTRACT 结果识别为日期?

Paypal IPN,在哪里将我的订单 ID 放在 paypal sdk (android) 中以通过我的服务器验证付款?

我想为我的应用程序添加在线功能。我该怎么做?