TypeError:pandasql中预期的字符串或类字节对象

时间:2018-01-05 12:29:39

标签: python

我在我的python 3.x中运行pandasql。我有一个客户 - 城市数据。样品如下:

我想按城市检索不同的Customer_number。所以我使用了以下代码

import io
import pandas as pd
import os 
import pandasql as pdsql
os.chdir(path) 

df = pd.read_csv(StringIO(
"""CUSTOMER_ID, City
21397845, Birmingham
26396841, Anchorage
52396841, Bullhead
67896841, Flagstaff"""))

def Cust(city_value):


    city='"'+city_value+'"'
    print("city="+city)

    str2='select * from df_city where City='+ city
    pysql = lambda q: pdsql.sqldf(q, globals())
    df1 = pysql(str2)
    return df1

df_city是一个全局变量。但运行此查询后,我收到以下错误消息

 File "<ipython-input-53-5bbe2c883433>", line 17, in Cust
    df1 = pysql(str2)

  File "<ipython-input-53-5bbe2c883433>", line 15, in <lambda>
    pysql = lambda q: pdsql.sqldf(q, globals())

  File "C:\ProgramData\Anaconda3\lib\site-packages\pandasql\sqldf.py", line 156, in sqldf
    return PandaSQL(db_uri)(query, env)

  File "C:\ProgramData\Anaconda3\lib\site-packages\pandasql\sqldf.py", line 50, in __call__
    for table_name in extract_table_names(query):

  File "C:\ProgramData\Anaconda3\lib\site-packages\pandasql\sqldf.py", line 108, in extract_table_names
    tables_blocks = re.findall(r'(?:FROM|JOIN)\s+(\w+(?:\s*,\s*\w+)*)', query, re.IGNORECASE)

  File "C:\ProgramData\Anaconda3\lib\re.py", line 222, in findall
    return _compile(pattern, flags).findall(string)

你能帮我修改我的代码吗?

1 个答案:

答案 0 :(得分:0)

我无法重现你的问题,这对我有用(Python 2.7.5)

import StringIO
import pandas as pd
import pandasql as pdsql 

df = pd.read_csv(StringIO(
"""CUSTOMER_ID,City
21397845,Birmingham
26396841,Anchorage
52396841,Bullhead
67896841,Flagstaff"""))

def Cust(city_value):
    city='"'+city_value+'"'
    print("city="+city)
    str2='select * from df where City='+ city
    pysql = lambda q: pdsql.sqldf(q, globals())
    df1 = pysql(str2)
    return df1

Cust('Birmingham')

返回:

   CUSTOMER_ID        City
0     21397845  Birmingham

[注意:我删除了df数据中与您的帖子相比的空格(我的编辑,另一次sry ......: - /)