列名にスペースを含むデータフレームがあります。 query
メソッドを使用して結果を取得しようとしています。 「c」列では正常に機能していますが、「a b」でエラーが発生しています
import pandas as pd
a = pd.DataFrame(columns=["a b", "c"])
a["a b"] = [1,2,3,4]
a["c"] = [5,6,7,8]
a.query('a b==5')
このため、私はこのエラーを取得しています:
a b ==5
^
SyntaxError: invalid syntax
「_」などの他の文字でスペースを埋めたくありません。
Pandasqlを使用して角かっこ内に変数名を入れるハックが1つあります。[a b]
From pandas 0.25
以降、バッククォートで列名をエスケープできるので、
a.query('`a b` == 5')
説明したとおり here :
DataFrame.query()
およびDataFrame.eval()
は、スペースを含む名前を参照するために、列名を引用符で囲むことをサポートするようになりました( GH6508 )
以下を使用できます。
a.query('`a b`==5')
列名に空白が含まれている場合、pd.DataFrame.query
は使用できません。 a
、b
およびa b
という名前の列がある場合にどうなるかを考えてください。必要なものに関してあいまいさがあります。
代わりに、pd.DataFrame.loc
を使用できます。
df = df.loc[df['a b'] == 5]
行のみをフィルタリングしているため、.loc
アクセサーを完全に省略することができます。
df = df[df['a b'] == 5]
まだ不可能です。チェック github issue#6508 :
実際には。queryは単なる便利なインターフェイスであり、実際には非常に具体的な保証があり、クエリのように解析することを意味することに注意してください言語であり、完全に一般的なインターフェースではありません。
理由は、query
が有効なpython式である必要があるため、列名は有効なpython識別子でなければなりません。
解決策は boolean indexing
:
df = df[df['a b'] == 5]
Pandas.query関数を使用する代わりに、この場合、条件を作成して値を検索し、条件がTrueである場所を作成します。例えば:
import pandas as pd
a = pd.DataFrame(columns=["a b", "c"])
a["a b"] = [1,2,3,5]
a["c"] = [5,6,7,8]
#a.query('a b==5') Remove the query because it cannot lookup columns with spaces in the name.
condition = a['a b'] == 5
print(a['a b'][condition]
出力:
3 5
インデックス3で条件がTrueと評価されることがわかります(一連のブール値ではなく特定のインデックスが必要な場合)。
クエリメソッドが空のスペースを持つ列名を受け入れないことを恐れています。いずれの場合でも、次の方法でデータフレームを照会できます。
import pandas as pd
a = pd.DataFrame({'a b':[1,2,3,4], 'c':[5,6,7,8]})
a[a['a b']==1]