Python 熊猫';指定数据类型时不起作用?
在定义自己的数据类型后,Python 熊猫';指定数据类型时不起作用?,python,pandas,types,rounding,Python,Pandas,Types,Rounding,在定义自己的数据类型后,pandas.round()无法按预期工作时,我遇到了一个问题。我用v。0.24.2 假设我将数据设置为float64,我想将数据设置为float32,以节省一些内存,我想进行一些舍入: import pandas as pd my_dtypes = {'val': 'float32'} my_decimals = {'val': 4} df = pd.DataFrame({'val': [0.14579999446868896]}) # <- this wil
pandas.round()
无法按预期工作时,我遇到了一个问题。我用v。0.24.2
假设我将数据设置为float64
,我想将数据设置为float32
,以节省一些内存,我想进行一些舍入:
import pandas as pd
my_dtypes = {'val': 'float32'}
my_decimals = {'val': 4}
df = pd.DataFrame({'val': [0.14579999446868896]}) # <- this will be 'float64'
df_mydtypes = df.astype(my_dtypes)
df_rounded = df.round(my_decimals)
df_mydtypes_rounded = df_mydtypes.round(my_decimals)
从表面上看,它看起来不错,但如果我们仔细观察(就像我的unittest那样),它的值就不同了:
0 0.1458
Name: val, dtype: float64
0 0.1458
Name: val, dtype: float32
0.1458
0.14579999446868896
这是怎么回事?我认为这与计算机科学中一个更普遍的问题有关,也与浮点数的存储方式有关。有关详细说明,请参见Python文档中的 处理此问题的一些方法:
- 我注意到
或.values
确实生成了正确的数字,但是.iloc
和to_list()
没有生成正确的数字。我猜这与.item()
如何处理和生成底层pandas
数组有关numpy
- Python还有一个模块,以防您需要“人”浮动而不是计算机浮动
0 0.1458
Name: val, dtype: float64
0 0.1458
Name: val, dtype: float32
0.1458
0.14579999446868896