Pandas df.query查询超大数值失败,如何实现正确查询?
解决Pandas中df.query匹配超大数值失效的问题
你的判断没错,问题出在超大数值嵌入查询字符串时的精度丢失:当你把大整数直接写在df.query的字符串里,Pandas会把这个字符串里的数值解析成Python数值,但超大整数可能被转换成浮点数(浮点数精度有限,无法精确表示所有大整数),导致和DataFrame里的原始整数不匹配。
下面是三种可行的解决方法:
方法一:将列转为字符串类型后查询
先把存储大数值的列转换成字符串,查询时直接匹配字符串,完全避免精度问题:# 转换列类型 df['A'] = df['A'].astype(str) # 带引号查询字符串形式的大数值 result = df.query('A == "12020896188572046212"')方法二:使用布尔索引直接匹配
绕开df.query,直接用DataFrame的布尔索引做数值比较,这种方式不经过字符串解析环节,直接用原生整数比较:result = df[df['A'] == 12020896188572046212]方法三:在query中引用外部变量
把大数值赋值给变量,在df.query里用@符号引用这个变量,直接传递原始整数对象,避免字符串到数值的解析:target_num = 12020896188572046212 result = df.query('A == @target_num')
内容的提问来源于stack exchange,提问作者HarryQ
相关产品推荐
相关产品推荐

