Cython和Numba,Pandasql sqldf select语句抛出sqlite3.OperationalError:没有这样的表

时间:2018-03-17 17:08:00

标签: python-3.x pandas cython numba pandasql

我是Python编程的新手。我有一个数据帧pandasql查询,当我使用标准的Python3实现运行我的代码时运行正常。 然而,在进行cython化之后,我总是会遇到以下异常:

sqlite3.OperationalError:没有这样的表:dataf

以下是processor.pyx文件的片段

import pandas as pd
from pandasql import sqldf

    def process_date(json):
        #json has the properties format [{"x": "1", "y": "2", "z": "3"}]
        dataf = pd.read_json(json, orient='records')
        sql = """select x, y, z from dataf;"""
        result = sqldf(sql)

对代码进行cython化会使其行为有所不同吗?这个完全相同的代码运行 使用标准的python3实现很好。 以下是我编写的setup.py,用于将代码转换为c。

# several files with ext .pyx, that i will call by their name
from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext

ext_modules=[
    Extension("c_processor",     ["processor.pyx"])]

setup(
  name = 'RTP_Cython',
  cmdclass = {'build_ext': build_ext},
  ext_modules = ext_modules,
)

我也尝试使用Numba并遇到同样的错误。代码如下:

import pandas as pd
from pandasql import sqldf
from numba import jit
from numpy import arange

@jit
def process_data():
        print("In process data")
        json = "[{\"id\": 2, \"name\": \"zain\"}]"
        df = pd.read_json(json, orient='records')
        sql = "select id, name from df;"
        df = sqldf(sql)
        print("the df is %s" % df)
process_data()

如果我注释掉@jit注释,代码工作正常。 我是否应该使用与C操作的熊猫库的另一个扩展,因为Numba和Cython都给我同样的错误? 我希望有一个简单的解决方案。

0 个答案:

没有答案