将round float转换为string pandas的问题

Jos*_*uez 7 floating-point rounding dataframe python-2.7 pandas

我正在将数据框中的列舍入到最近的5个浮点.之后我将列值转换为字符串,但是当我这样做时,浮动返回就好像它们没有接地一样.我正在使用Python 2.7

import pandas as pd
df=pd.read_excel(C:"path")

def custom_round(x, base=5):
    return base * round(float(x)/base)

df['A'] = df['kl'].apply(lambda x: custom_round(x, base=.05))
df['b'] = "D = "  + df['A'].astype(str)


     kl     A                       b  
 0.600001  0.60  D = 0.6000000000000001  
 0.600001  0.60  D = 0.6000000000000001  
 0.600000  0.60  D = 0.6000000000000001  
 0.600000  0.60  D = 0.6000000000000001  
 0.600587  0.60  D = 0.6000000000000001  
 0.601573  0.60  D = 0.6000000000000001  
 0.601168  0.60  D = 0.6000000000000001  
 0.600001  0.60  D = 0.6000000000000001  
 0.600001  0.60  D = 0.6000000000000001  
 0.600001  0.60  D = 0.6000000000000001  
 0.600000  0.60  D = 0.6000000000000001  
 0.600001  0.60  D = 0.6000000000000001  
 0.600001  0.60  D = 0.6000000000000001  
 0.600001  0.60  D = 0.6000000000000001  
 0.600001  0.60  D = 0.6000000000000001  
 0.850001  0.85  D = 0.8500000000000001  
Run Code Online (Sandbox Code Playgroud)

小智 2

这里我认为你可以使用字符串格式。我使用'${:,.2f}'.format(1234.5)(来源此处)格式化美元和美分,但我能够在 lambda 函数中使用相同的格式化方法将浮点数转换为字符串。

import pandas as pd 
data = {'kl' : [0.600001, 0.600001, 0.600000, 0.600000, 
                0.600587, 0.601573, 0.601168, 0.600001, 
                0.600001, 0.600001, 0.600000, 0.600001, 
                0.600001, 0.600001, 0.600001, 0.850001]}
df = pd.DataFrame.from_dict(data)

def custom_round(x, base=5):
    return base * round(float(x)/base)

df['A'] = df['kl'].apply(lambda x: custom_round(x, base=.05))
df['b'] = "D = " + df['A'].apply(lambda s: '{:,.5f}'.format(s))
Run Code Online (Sandbox Code Playgroud)