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