将相同的熊猫数据帧存储到数据库后不相等

时间:2019-11-28 15:28:53

标签: python pandas postgresql

我有一个熊猫数据框: (编辑:实际df)

date
2019-11-01 07:30:00+00:00    1148.144708
2019-11-01 07:45:00+00:00    1148.015876
2019-11-01 08:00:00+00:00    1147.911068
2019-11-01 08:15:00+00:00    1147.925240
2019-11-01 08:30:00+00:00    1148.007117
2019-11-01 08:45:00+00:00    1148.122853
2019-11-01 09:00:00+00:00    1148.251176
2019-11-01 09:15:00+00:00    1148.362736
2019-11-01 09:30:00+00:00    1148.423236
2019-11-01 09:45:00+00:00    1148.528360
Name: value, dtype: float64

我使用以下方法将其保存到Postgres数据库中:

df.to_sql('test_pp', con=engine)

当我以new_df的形式从数据库取回它之后: (编辑:实际df)

date
2019-11-01 07:30:00+00:00    1148.144708
2019-11-01 07:45:00+00:00    1148.015876
2019-11-01 08:00:00+00:00    1147.911068
2019-11-01 08:15:00+00:00    1147.925240
2019-11-01 08:30:00+00:00    1148.007117
2019-11-01 08:45:00+00:00    1148.122853
2019-11-01 09:00:00+00:00    1148.251176
2019-11-01 09:15:00+00:00    1148.362736
2019-11-01 09:30:00+00:00    1148.423236
2019-11-01 09:45:00+00:00    1148.528360
Name: value, dtype: float64
这两个数据帧都不相等。为什么会这样?

df.equals(new_df)

返回 False 。 任何想法? 附注:我还检查了订单和形状,并根据日期对其进行了排序。

我还检查了索引

DatetimeIndex(['2019-11-01 09:45:00+00:00'], dtype='datetime64[ns, UTC]', name='date', freq=None),
DatetimeIndex(['2019-11-01 09:45:00+00:00'], dtype='datetime64[ns, UTC]', name='date', freq=None))

和dtypes

df['value'].dtypes, new_df['value'].dtypes

返回

(dtype('float64'), dtype('float64'))

奇怪的是,

df['value'].iloc[-1:].index == new_df['value'].iloc[-1:].index

返回 True

df['value'].iloc[-1].values == new_df['value'].iloc[-1].values

返回 False

1 个答案:

答案 0 :(得分:1)

这是因为Postgres中的double precision。四舍五入到最后三位。