Python 当遍历Dataframe时,浮点值会发生变化

Python 当遍历Dataframe时,浮点值会发生变化,python,pandas,dataframe,floating-point,Python,Pandas,Dataframe,Floating Point,我通过从csv文件中读取数据帧来在Pandas中创建数据帧。 数据帧包含多个浮点值。 当我使用itertuples对数据帧进行迭代时,一个浮点值从2.3更改为2.2999999998。 首先,我认为这可能会发生,因为数据格式在数据帧和元组之间发生变化,但值在数据帧和元组中都存储为float 所以我的问题是:为什么会发生这种情况 print(dfAll) speed=dfAll['speed'] for value in motion: print(type(value)) for t i

我通过从csv文件中读取数据帧来在Pandas中创建数据帧。 数据帧包含多个浮点值。 当我使用itertuples对数据帧进行迭代时,一个浮点值从2.3更改为2.2999999998。 首先,我认为这可能会发生,因为数据格式在数据帧和元组之间发生变化,但值在数据帧和元组中都存储为float

所以我的问题是:为什么会发生这种情况

print(dfAll) 
speed=dfAll['speed']
for value in motion:
   print(type(value))
for t in dfAll.itertuples():
   print(type(t.speed))
   print(t)

phase  motion  speed  attention shape_speed shape_combination  fail
0      1      80    1.7         90          up                up     0
1      1      89    1.5         85        same              same     0
2      1      75    2.3         75        down              down     0
3      1      82    2.5         80        same              same     0
4      1      30    0.0          0           0                 0     1
<type 'numpy.float64'>
<type 'numpy.float64'>
<type 'numpy.float64'>
<type 'numpy.float64'>
<type 'numpy.float64'>
<type 'numpy.float64'>
Pandas(Index=0, phase=1, motion=80, speed=1.7, attention=90, shape_speed=u'up', shape_combination=u'up', fail=0)
<type 'numpy.float64'>
 Pandas(Index=1, phase=1, motion=89, speed=1.5, attention=85, shape_speed=u'same', shape_combination=u'same', fail=0)
<type 'numpy.float64'>
 Pandas(Index=2, phase=1, motion=75, speed=2.2999999999999998, attention=75, shape_speed=u'down', shape_combination=u'down', fail=0)
<type 'numpy.float64'>
Pandas(Index=3, phase=1, motion=82, speed=2.5, attention=80,   shape_speed=u'same', shape_combination=u'same', fail=0)
<type 'numpy.float64'>
Pandas(Index=4, phase=1, motion=30, speed=0.0, attention=0, shape_speed=u'0', shape_combination=u'0', fail=1)
打印(dfAll)
速度=dfAll[“速度”]
对于运动中的值:
打印(类型(值))
对于dfAll.itertuples()中的t:
打印(类型(t.speed))
打印(t)
相位运动速度注意形状\速度形状\组合失败
01 80 1.7 90向上0
1 189 1.5 85相同的0
2 1 75 2.3 75向下0
3 1 82 2.5 80相同的0
4      1      30    0.0          0           0                 0     1
熊猫(指数=0,阶段=1,运动=80,速度=1.7,注意力=90,形状\速度=u'up',形状\组合=u'up',失败=0)
熊猫(指数=1,阶段=1,运动=89,速度=1.5,注意力=85,形状和速度=u‘相同’,形状和组合=u‘相同’,失败=0)
熊猫(指数=2,相位=1,运动=75,速度=2.2999999998,注意力=75,形状速度=u'down',形状组合=u'down',失败=0)
熊猫(指数=3,阶段=1,动作=82,速度=2.5,注意力=80,形状和速度=u‘相同’,形状和组合=u‘相同’,失败=0)
熊猫(指数=4,阶段=1,运动=30,速度=0.0,注意力=0,形状\速度=u'0',形状\组合=u'0',失败=1)

您确定这不仅仅是浮点不精确吗?这是由于在二进制中表示浮点而产生的预期行为是的,这可能是,我不熟悉浮点。对我来说似乎很奇怪,因为我并没有做任何有价值的事情。存储在您机器中的数字的可能重复项并没有改变;这仅仅与他们的表现方式有关
2.3和
2.29999999998
是完全相同实际值的两种不同表示形式。(在Python提示下尝试
2.29999999998==2.3
)机器中存储的实际值是
2.2999999999822364316059974953221893310546875
,这相当长,因此您可以理解为什么大多数工具选择显示圆角表示而不是精确表示。