熊猫中的扩展名dtypes似乎存在查询错误

时间:2019-02-19 06:19:53

标签: pandas

(2019年2月19日): 我在numexpr跟踪器中打开了一个报告: https://github.com/pydata/numexpr/issues/331

熊猫报告是: https://github.com/pandas-dev/pandas/issues/25369

除非我正在做我不应该做的事情, 可空int的新dtype扩展在数据帧上的QUERY方法似乎有一个错误(问题似乎出在numexpr软件包中):

df_test = pd.DataFrame(data=[4,5,6], columns=["col_test"])
df_test = df_test.astype(dtype={"col_test": pd.Int32Dtype()})
df_test.query("col_test != 6")

长错误消息的最后几行是:

  

文件“ ... \ site_packages \ numexpr \ necompiler.py”,第822行,在评估中       zip(名称,参数)]文件“ ... \ site_packages \ numexpr \ necompiler.py”,第821行,在       签名= [[(name,arg)的文件(...,site_packages \ numexpr \ necompiler.py“,行703,在getType中的((name,getType(arg)))       引发ValueError(“未知类型%s”%a.dtype.name)ValueError:未知类型对象

非扩展dtype可以正常工作:

df_test = df_test.astype(dtype={"col_test": np.int32})
df_test.query("col_test != 6")

(p.s。作为完全独立的问题,通过dtype 直接连接到pd.DataFrame构造函数无效-似乎有错误)。

谢谢。

1 个答案:

答案 0 :(得分:1)

在0.24中首次引入了扩展dtype,并且有很多缺点可以解决。

也就是说,这似乎是numexpr和pandas之间的某种兼容性问题。这肯定看起来有问题,在解决之前,我们将不得不退回到'python'引擎。

df_test.query('col_test != 6', engine='python')

   col_test
0         4
1         5

(有关query / eval的更多信息:Dynamic Expression Evaluation in pandas using pd.eval()

尽管您可以做到

df_test.loc[df_test['col_test'] != 6]

   col_test
0         4
1         5

这可能会更快(使用engine='python'不会比loc带来任何性能优势)。