1

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: 'select CONTACT_WID, sum(FreqGamePlay) as FGP from FreqGamePlay where TITLE_NOMIN_DT > i group by 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)

しかし、実際のプログラムにははるかに大きな日付のリストがあるため、上記は効率的ではありません。任意の提案をいただければ幸いです、ありがとう

4

1 に答える 1