Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python pandasql::sqldf未捕获循环变量_Python_Sql_Pandas_Pandasql - Fatal编程技术网

Python pandasql::sqldf未捕获循环变量

Python pandasql::sqldf未捕获循环变量,python,sql,pandas,pandasql,Python,Sql,Pandas,Pandasql,我试图用pandasql::sqldf循环一个列表,但这个sqldf似乎没有捕获循环变量。以下是我的问题的程式化概述: import pandas as pd from pandasql import sqldf from datetime import datetime FreqGamePlay = pd.DataFrame({'CONTACT_WID' : [1, 2, 3, 1, 4], 'TITLE_NOMIN_DT' : pd.to

我试图用pandasql::sqldf循环一个列表,但这个sqldf似乎没有捕获循环变量。以下是我的问题的程式化概述:

import pandas as pd
from pandasql import sqldf
from datetime import datetime

FreqGamePlay = pd.DataFrame({'CONTACT_WID' : [1, 2, 3, 1, 4], 
                         'TITLE_NOMIN_DT' : pd.to_datetime(['20130102', '20140103', '20120518', 
                                        '20140317', '20111123']),
                        'FreqGamePlay' : [12, 9, 22, 4, 5]})
FreqGamePlay = FreqGamePlay[['CONTACT_WID', 'TITLE_NOMIN_DT', 'FreqGamePlay']]

periodsList = ['2012-12-26', '2012-02-28']
for i in periodsList:
    temp = sqldf("select CONTACT_WID, sum(FreqGamePlay) as FGP from FreqGamePlay where TITLE_NOMIN_DT > i group by CONTACT_WID;", globals())
    print(temp)
上述程序给出以下错误:

PandaSQLException:(sqlite3.OperationalError)没有这样的列:i[SQL:'从FreqGamePlay中选择CONTACT_WID,sum(FreqGamePlay)作为FGP,其中TITLE_NOMIN_DT>i按CONTACT_WID分组;']

但是,如果我手工硬编码日期,效果很好:

for i in periodsList:
    temp = sqldf("select CONTACT_WID, sum(FreqGamePlay) as FGP from FreqGamePlay where TITLE_NOMIN_DT > '2012-12-26' group by CONTACT_WID;", globals())
    print(temp)

但是上面提到的并不是很有效,因为实际的程序有一个更大的日期列表。感谢您的建议,这是因为您将“i”变量直接包含在SQL字符串中,因此Python假定它是字符串的一部分,并且不会对变量求值(您可以注意到,在错误消息中,i变量没有被其值替换)。我建议您阅读一些关于使用Python字符串和变量的内容。在此之前,请尝试以下方法:

for i in periodsList:
    query = "select CONTACT_WID, sum(FreqGamePlay) as FGP from FreqGamePlay where TITLE_NOMIN_DT > '{}' group by CONTACT_WID;".format(i)
    temp = sqldf(query, globals())
大括号用作变量的占位符,format()方法用于将占位符替换为变量值