(2/19/2019):我在 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")
Run Code Online (Sandbox Code Playgroud)
长错误消息的最后几行是:
文件“...\site_packages\numexpr\necompiler.py”,第 822 行,在评估 zip(names,arguments)] 文件“...\site_packages\numexpr\necompiler.py”,第 821 行,签名 = [( name, getType(arg)) for (name, arg) in File "...\site_packages\numexpr\necompiler.py", line 703, in getType raise ValueError("unknown type %s" % a.dtype.name)值错误:未知类型对象
非扩展 dtypes 工作正常:
df_test = df_test.astype(dtype={"col_test": np.int32})
df_test.query("col_test != 6")
Run Code Online (Sandbox Code Playgroud)
(ps 作为一个完全独立的问题,将 dtype 直接传递给 pd.DataFrame 构造函数是行不通的——似乎有问题)。
谢谢。
cs9*_*s95 17
扩展数据类型在 0.24 中首次引入,并且有很多问题需要解决。
也就是说,这似乎是 numexpr 和 pandas 之间的某种兼容性问题。这看起来肯定有问题,在它被修复之前,我们将不得不回到引擎'python'。
df_test.query('col_test != 6', engine='python')
col_test
0 4
1 5
Run Code Online (Sandbox Code Playgroud)
(更多信息query/ eval:使用 pd.eval() 在 pandas 中进行动态表达式评估)
尽管事实上你可以这样做
df_test.loc[df_test['col_test'] != 6]
col_test
0 4
1 5
Run Code Online (Sandbox Code Playgroud)
这可能会快得多(使用engine='python'不会比 提供任何性能优势loc)。
| 归档时间: |
|
| 查看次数: |
3036 次 |
| 最近记录: |