Python 比较这些值会产生不同的结果
我有一个脚本,它将数据从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系列中)的原始代码为: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文件读取原始数据帧。其他一切都没变。比较似乎
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