我在我的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)
你能帮我修改我的代码吗?
答案 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 ......: - /)