Python Pandas数据框围绕基础数据(不仅仅是它的显示方式)

Python Pandas数据框围绕基础数据(不仅仅是它的显示方式),python,pandas,dataframe,floating-point,Python,Pandas,Dataframe,Floating Point,您可能会说这以前已经做过,但我能找到的所有解决方案都失败了,请允许我演示: 首先,这是我的进口货 import numpy as np import pandas as pd pd.options.display.float_format = '{:.2f}'.format 值是自然的,不是四舍五入的 df[df['foo']==foo]['bar'].sum() > 1924961.5499999998 第一次尝试: df['bar'] = df['bar'].round(2) d

您可能会说这以前已经做过,但我能找到的所有解决方案都失败了,请允许我演示:

首先,这是我的进口货

import numpy as np
import pandas as pd
pd.options.display.float_format = '{:.2f}'.format
值是自然的,不是四舍五入的

df[df['foo']==foo]['bar'].sum()
> 1924961.5499999998
第一次尝试:

df['bar'] = df['bar'].round(2)

df[df['foo']==foo]['bar'].sum()
> 1924961.5499999998
第二次尝试:

df['bar'] = df['bar'].apply(lambda x: round(x, 2))

df[df['foo']==foo]['bar'].sum()
> 1924961.5499999998
df['bar'] = np.round(df['bar'], decimals=2)

df[df['foo']==foo]['bar'].sum()
> 1924961.5499999998
第三次尝试:

df['bar'] = df['bar'].apply(lambda x: round(x, 2))

df[df['foo']==foo]['bar'].sum()
> 1924961.5499999998
df['bar'] = np.round(df['bar'], decimals=2)

df[df['foo']==foo]['bar'].sum()
> 1924961.5499999998
我错过了什么?也许这是一个版本的东西

!pip show pandas
> Name: pandas
> Version: 0.23.3
> ...
最后,有一件事很奇怪:

df['bar'].sum()
> 298730861.26

df[df['foo']==foo]['bar'].sum()
> 1924961.5499999998
我甚至不知道该怎么办。谢谢

编辑:

dtype
应该是
object
?或
字符串

第四次尝试:

df['bar'] = df['bar']
df['bar'] = df['bar'].astype(str)

# in order to sum I have to convert back to float and the underlying data remains
df[df['foo']==foo]['bar'].astype(float).sum()  
> 1924961.5499999998

如果它们不是字符串,则始终存在浮点精度的风险。来源是什么?您可能想看到@JustinEzequiel数据来自数据库,也许我可以在事后应用转换器,而不是在摄取时应用?如果它们不是字符串,则始终存在浮点精度的风险。来源是什么?你可能想看到@JustinEzequiel数据来自数据库,也许我可以在事后应用转换器,而不是在摄入时?