0

我对 Python 编程真的很陌生。我有一个数据框 pandasql 查询,当我使用标准 Python3 实现运行我的代码时,它运行良好。但是,在对它进行 cythonizing 之后,我总是会遇到以下异常:

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)

对代码进行cythonizing可以使其行为不同吗?这个完全相同的代码在标准的 python3 实现中运行良好。 以下是我编写的用于将代码转换为 c 的 setup.py。

# 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 都给了我同样的错误?我希望有一个简单的解决方案。

4

0 回答 0