简体   繁体   中英

Round a float to the smallest number keeping a few decimal places

I need to round a column with floats to 2 decimal places, but without rounding the data to the nearest value

My data:

df = pd.DataFrame({'numbers': [1.233,1.238,5.059,5.068, 8.556]})
df.head()
    numbers
0   1.233
1   1.238
2   5.059
3   5.068
4   8.556

Expected output:

    numbers
0   1.23
1   1.23
2   5.05
3   5.06
4   8.55

The problem

Everything I've tried rounds the numbers to the nearest number (0-4 is 0 and 5-9 is added 1 to the truncated decimal place)

Examples of what didn't work

df[['numbers']].round(2)
#or df['numbers'].apply(lambda x: "%.2f" % x)

#output
    numbers
0   1.23
1   1.24
2   5.06
3   5.07
4   8.56

This is more like round down

df.numbers*100//1/100
Out[186]: 
0    1.23
1    1.23
2    5.05
3    5.06
4    8.55
Name: numbers, dtype: float64

Try this, works well also

import pandas as pd
do = lambda x: float(str(x).split('.')[0] +'.' + str(x).split('.')[1][0:2])
df = pd.DataFrame({'numbers': list(map(do, [1.233,1.238,5.059,5.068, 8.556]))})
print(df.head())

output

numbers
0     1.23
1     1.23
2     5.05
3     5.06
4     8.55

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM