4

pandasql パッケージの sqldf メソッドには、「セッション/環境変数」があり、locals() または globals() の可能性があります。また、いつ locals() を使用する必要があるか、およびいつ globals() を使用する必要があるかについてのドキュメント参照はありますか?

https://github.com/yhat/pandasql/

これが私のコードで、pandansql が完全な locals() を探しているものを疑問に思っていますか? locals() はメソッド select_first_50 内の名前空間を意味しますか?

def select_first_50(filename):
    students = pandas.read_csv(filename)
    students.rename(columns = lambda x: x.replace(' ', '_').lower(), inplace=True)

    q = "select major, gender from studentstable limit 50"

    #Execute your SQL command against the pandas frame
    results = pandasql.sqldf(q.lower(), locals())
    return results
4

1 に答える 1

8

locals()およびglobals()は、対応する名前空間を返すために使用される Python 組み込み関数です。

Python では、名前空間はスコープを実装する方法です。したがって、グローバル名前空間はグローバル スコープを意味するため、そこで定義された変数 (名前) はモジュール全体で表示されます。

local namepsace は、特定の関数に対してローカルな名前空間です。

globals()現在のグローバル名前空間を表す辞書を返します。

locals()の戻り値は、呼び出された場所によって異なります。スクリプト スコープ内 (特定の関数内ではなく) で直接呼び出された場合globals()、グローバル名前空間と同じ辞書が返されます。関数内で呼び出されると、ローカルの名前空間を返します。

pandasql では、渡す必要がある 2 番目の引数は基本的に、クエリで使用している変数を含むこの名前空間 (辞書) です。つまり、 という DataFrame を作成し、そのa上にクエリを記述するとします。次に、pandasql は、この名前に対応する DataFrame を知る必要がありaます。これには、ローカル/グローバル名前空間が必要であり、それが 2 番目の引数の目的です。

したがって、何を渡すかを決定する必要があります。たとえば、DataFrame が関数内でのみ定義され、グローバル スコープに存在しない場合は、locals()return 辞書を渡す必要があります。DataFrame がグローバル スコープに存在する場合は、渡す必要があります。の結果globals()

于 2015-08-16T07:01:56.617 に答える