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