如何在 python 中截断不精确的浮点数
How to truncate floating points imprecision in python
我正在编写一个程序,在该程序中比较和排列日期系列中的值很重要。但是,我 运行 遇到了浮点数不精确的问题
我正在从我的 SQL 服务器中提取这些数据,它们都应该是 1.6。然而,事实证明它们略有不同(见下文)。因此,当我使用 dataframe.rank() 时,它不会将这两个日期视为同一等级,而是将 01/02/2004 排在 02/01/2005 之上。
任何人都知道如何处理这个问题,以便这两个人最终排名相同?
modelInputData.loc['01/02/2004',('Level','inflationCore','EUR')]
Out[126]: 1.6000000000000003
modelInputData.loc['02/01/2005',('Level','inflationCore','EUR')]
Out[127]: 1.6000000000000001
您可以在带有浮点数的列上使用 pd.Series.round()。
precision = 2
df['col'] = df['col'].round(decimals = precision)
参见:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.round.html
我建议你像银行家那样做 - 使用分和整数而不是 EUR/USD 和 float/decimal 变量
要么在 MySQL 端将其转换为美分,要么在 pandas:
端进行转换
df['amount'] = round(df['amount']*100)
到时候你的问题会少很多
我正在编写一个程序,在该程序中比较和排列日期系列中的值很重要。但是,我 运行 遇到了浮点数不精确的问题
我正在从我的 SQL 服务器中提取这些数据,它们都应该是 1.6。然而,事实证明它们略有不同(见下文)。因此,当我使用 dataframe.rank() 时,它不会将这两个日期视为同一等级,而是将 01/02/2004 排在 02/01/2005 之上。
任何人都知道如何处理这个问题,以便这两个人最终排名相同?
modelInputData.loc['01/02/2004',('Level','inflationCore','EUR')]
Out[126]: 1.6000000000000003
modelInputData.loc['02/01/2005',('Level','inflationCore','EUR')]
Out[127]: 1.6000000000000001
您可以在带有浮点数的列上使用 pd.Series.round()。
precision = 2
df['col'] = df['col'].round(decimals = precision)
参见:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.round.html
我建议你像银行家那样做 - 使用分和整数而不是 EUR/USD 和 float/decimal 变量
要么在 MySQL 端将其转换为美分,要么在 pandas:
端进行转换df['amount'] = round(df['amount']*100)
到时候你的问题会少很多