Python 比较这些值会产生不同的结果

Python 比较这些值会产生不同的结果,python,postgresql,pandas,Python,Postgresql,Pandas,我有一个脚本,它将数据从csv读入pd数据帧。然后,它迭代每一行,并将该行作为pd系列传递给另一个模块。此处,对其中一列进行评估,以查看其是否大于另一个pd系列中包含的值,例如: df_1: df_2: 在上面的示例中,选择数据帧的第一行并发送给一个函数,该函数检查df_1['Col_a'](即:234.0)是否大于df_2['Col_X'](即:124.1)。这一切都很完美 现在我的问题来了,我已经将脚本更改为从PostgreSQL db而不是csv文件读取原始数据帧。其他一切都没变。比较似乎

我有一个脚本,它将数据从csv读入pd数据帧。然后,它迭代每一行,并将该行作为pd系列传递给另一个模块。此处,对其中一列进行评估,以查看其是否大于另一个pd系列中包含的值,例如:

df_1:

df_2:

在上面的示例中,选择数据帧的第一行并发送给一个函数,该函数检查df_1['Col_a'](即:234.0)是否大于df_2['Col_X'](即:124.1)。这一切都很完美

现在我的问题来了,我已经将脚本更改为从PostgreSQL db而不是csv文件读取原始数据帧。其他一切都没变。比较似乎什么都没做,……它的计算结果不是真的或假的,它只是完全跳过了计算

从csv读入时,用于比较两个正常工作的值(每个值包含在pd系列中)的原始代码为:

if df_1['col_A'] > df_2['col_X']:
    #do something
在从csv和postgresql中读取时,我检查了这两个值的类型。它正在比较:

<class 'float'> and <class 'numpy.float64'>

我完全被难住了,因为唯一改变的是从数据库而不是csv获取数据。结果数据类型仍然相同,即:float与numpy相比。float64在我的机器上运行良好。此代码:

import numpy as np

df_1 = {'col_A': 234.0}
df_2 = {'col_X': np.float64(124.1)}

print(type(df_1['col_A']), type(df_2['col_X']))

if df_1['col_A'] > df_2['col_X']:
    #do something
    print(df_1['col_A'], 'is greater than', df_2['col_X'])
打印此文件:

<class 'float'> <class 'numpy.float64'>
234.0 is greater than 124.1

234.0大于124.1

您使用的是什么版本的Python和numpy?

numpy,因为它的C根,它的类型系统比纯Python更复杂。当您的(可能是非numpy)代码读取'float'变量时,numpy类型可能只会说“嘿,我不知道没有'float',滚开”。正如@tommy carstensen所指出的,它们是否真的这样做取决于python和numpy的版本

在对变量执行比较或算术运算之前,需要确保所有变量的类型相同。请参阅以进行讨论

if df_1.loc['col_A'] > df_2.loc['col_X']
and
if Decimal(df_1.loc['col_A']) > Decimal(df_2.loc['col_X'])
and
if abs(df_1.loc['col_A']) > abs(df_2.loc['col_X'])
import numpy as np

df_1 = {'col_A': 234.0}
df_2 = {'col_X': np.float64(124.1)}

print(type(df_1['col_A']), type(df_2['col_X']))

if df_1['col_A'] > df_2['col_X']:
    #do something
    print(df_1['col_A'], 'is greater than', df_2['col_X'])
<class 'float'> <class 'numpy.float64'>
234.0 is greater than 124.1