2017-11-05 7 views
0

位置、メトリックのリスト、再生された最小分数の3つの引数に基づいて、データフレームを作成する次の関数を定義しました。 (私はサッカーの試合データで作業しています。)データフレーム(cpd_df)はPandaSQLパッケージを使用して照会され、この新しいデータフレームが返されます。次の引数を挿入するときPythonで見つからない関数で作成されたPandasデータフレーム

def create_positional_dfs(position, list_of_metrics, minimum_minutes): 
    if position == 'DM': 
     relevant_df = DMs 
    elif position == 'AM': 
     relevant_df = AMs 
    else: 
     relevant_df = master 
    cpd_df = pd.DataFrame(data=relevant_df, columns=list_of_metrics) 
    cpd_query = """SELECT * FROM cpd_df WHERE [Total Mins] >= """ + str(minimum_minutes) + """ AND Position = '""" + position + """'""" 
    return psql.sqldf(cpd_query, globals()) 

はしかし、:

create_positional_dfs('CM', ['Passes', 'Tackles', 'Total Mins'], 450) 

私は次のエラーを取得する:

PandaSQLException: (sqlite3.OperationalError) no such table: cpd_df [SQL: "SELECT * FROM cpd_df WHERE [Total Mins] >= 450 AND Position = 'DM'"] 

Pythonの関数で作成しcpd_dfのデータフレームを見つけることができません表示されます。

関数内にパンダのデータフレームを作成することはできませんか?この問題を回避する最善の方法は何でしょうか?

ありがとうございます!

答えて

0

globals名前空間を渡していますが、cpd_dfというローカル変数です。代わりにlocalsを渡す:

def create_positional_dfs(position, list_of_metrics, minimum_minutes): 
    if position == 'DM': 
     relevant_df = DMs 
    elif position == 'AM': 
     relevant_df = AMs 
    else: 
     relevant_df = master 
    cpd_df = pd.DataFrame(data=relevant_df, columns=list_of_metrics) 
    cpd_query = """SELECT * FROM cpd_df WHERE [Total Mins] >= """ + str(minimum_minutes) + """ AND Position = '""" + position + """'""" 
    return psql.sqldf(cpd_query, locals()) # use locals here 
関連する問題