Python 相同的数据帧在存储到数据库后不相等
我有一个数据框: (编辑:实际df) 我使用以下方法将其保存到Postgres数据库中:Python 相同的数据帧在存储到数据库后不相等,python,pandas,postgresql,Python,Pandas,Postgresql,我有一个数据框: (编辑:实际df) 我使用以下方法将其保存到Postgres数据库中: df.to_sql('test_pp', con=engine) 当我将其作为新的_df从DB中检索回来时: (编辑:实际df) 这两个数据帧并不相等。为什么呢 df.equals(new_df) 返回False。 有什么想法吗? 附言:我还检查了订单和形状,并根据日期进行了排序 我还检查了索引 DatetimeIndex(['2019-11-01 09:45:00+00:00'], dtype='da
df.to_sql('test_pp', con=engine)
当我将其作为新的_df从DB中检索回来时:
(编辑:实际df)
这两个数据帧并不相等。为什么呢
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))
还有数据类型
df['value'].dtypes, new_df['value'].dtypes
返回
(dtype('float64'), dtype('float64'))
奇怪的是
df['value'].iloc[-1:].index == new_df['value'].iloc[-1:].index
返回True
及
返回False这是因为Postgres中的错误。它将最后3位四舍五入。检查所有值。
date
值只是字符串吗?使用您提供的代码,数据帧显然是相等的。请提供从数据库返回的实际数据帧(或至少部分数据帧)。我的猜测是postgres对日期做了一些事情,但是在没有看到数据框的情况下,我们只能猜测您似乎在这里输入了一个错误df.equals(df_new)
应该是df.equals(new_df)
谢谢!我编辑过。是@Lukas Thaler,postgres转换日期时区。但这不可能是问题所在,正如您所看到的,它们在同一时区。@giosans,不。它们是datetimeindex
(dtype('float64'), dtype('float64'))
df['value'].iloc[-1:].index == new_df['value'].iloc[-1:].index
df['value'].iloc[-1].values == new_df['value'].iloc[-1].values