Есть ли функция, которая будет округлять мои числа в пандах, сохраняя при этом мои приказы? - PullRequest
1 голос
/ 29 октября 2019

Я создал фрейм данных, используя панд, и мои числа в степени e-18 и т. Д. Как и ожидалось. Тем не менее, все мои числа округлены до 6 десятичных знаков, я хочу уменьшить это до 5 dp

Я попытался использовать функцию 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

по желанию, но одна цифра слишком много.

Ответы [ 2 ]

1 голос
/ 29 октября 2019

Установить опцию отображения:

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

Затем просто print (df _) . Конечно, это меняет только формат отображения. Внутри все числа хранятся с «обычной» точностью.

Альтернатива

Чтобы отобразить каждый столбец с индивидуальным форматированием, вы можете использовать что-то вроде:

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

настройка имен столбцов и их форматирование в соответствии с вашими потребностями.

0 голосов
/ 29 октября 2019

Вы можете сделать это следующим образом, используя 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})
...