質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

11945閲覧

列名に記号が入っている場合にエラーになる。

emix

総合スコア6

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/02/16 09:58

編集2020/02/16 12:13

記号の入った列名を指定したい

queryメソッドに記号の入った列名を指定するとエラーになってしまいます。
エスケープなど試してみたのですがダメでした。なにか方法はあるのでしょうか?

該当のソースコード

Python

1df.query("売上(店舗) == 0")

下記のようなエラーメッセージが表示されています。

Traceback (most recent call last): File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pandas/core/computation/scope.py", line 188, in resolve return self.resolvers[key] File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/collections/__init__.py", line 891, in __getitem__ return self.__missing__(key) # support subclasses that define __missing__ File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/collections/__init__.py", line 883, in __missing__ raise KeyError(key) KeyError: '売上'

Python

1print(df.columns) 2###結果 Index(['商品番号', '売上(店舗)'], dtype='object')

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2020/02/16 10:29

どのようなエラーですか?
emix

2020/02/16 10:40

売上がファンクションとして認識されてしまっているようです。
quickquip

2020/02/16 10:44

https://teratail.com/help/question-tips#questionTips3-4 実際に起きた結果を示しましょう。例えば、「○○というエラーが表示された」、「レイアウトがこのように崩れてしまった」等です。あなたの想像ではなく、実際に起きたことを述べましょう。 実際に起きたことと、あなたの予想をはっきり分けて書きましょう。
takasima20

2020/02/16 10:59

カラム名をクオートすればいい話だと思いますが、どのデータベースを使ってるかによってやり方が変わることもありますね。というか、自分だったらカラム名を修正するし、できないなら適当な view を作るかなあ。
emix

2020/02/16 11:01

初心者なもので質問に不備があり、すみません。
takasima20

2020/02/16 11:04

おっと失礼。データベースの話じゃなかったですね。
emix

2020/02/16 11:05

データはCSVから読み込んだものです。カラム名を変更してしまうのが手っ取り早いですよね。 できれば変更せずにやりたいです。
tiitoi

2020/02/16 11:20

print(df.columns) の結果を追記してください
takasima20

2020/02/16 13:42

自信ないんでこっちに(汗 df[df['売上(店舗)'] == 0]
emix

2020/02/16 14:02

昔ながら?の方法? df[df['売上(店舗)'] == 0] でやってみようと思います。 質問の仕方が下手ですみませんでした。色々と勉強になりました。 まだ勉強途中でして、これからもお世話になるかと思いますが皆様よろしくお願いいたします。
guest

回答1

0

ベストアンサー

You can refer to column names that contain spaces or operators by surrounding them in backticks. This way you can also escape names that start with a digit, or those that are a Python keyword. Basically when it is not valid Python identifier. See notes down for more details.

For example, if one of your columns is called a a and you want to sum it with b, your query should be `a a` + b.
pandas.DataFrame.query — pandas 1.0.1 documentation

`で囲うことで、こんな感じでエスケープできるはずです。

python

1df.query("`売上(店舗)` == 0")

ただし0.25以降なので、古めのpandasだと効かないかもしれません。その場合は昔ながらのqueryを使わない方法でdf[df["売上(店舗)"] == 0]のように指定することになるでしょう。

こちらも参考に:
python - Pandas query function not working with spaces in column names - Stack Overflow

投稿2020/02/16 12:09

編集2020/02/16 12:20
hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

emix

2020/02/16 12:36

ご回答ありがとうございます。 バージョンは0.25.3だったのですが、バッククォートを使用してところ File "<unknown>", line 1 売上_(_店舗_)_BACKTICK_QUOTED_STRING >0 となってしまいました。
hayataka2049

2020/02/16 12:41

それでエラー全文でしょうか。tracebackとかあったら全部貼ってみてください。
emix

2020/02/16 12:47

エラー全文です。 Traceback (most recent call last): File "xxx.py", line 48, in <module> df_a = df.query("`売上(店舗)` == 0") File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pandas/core/frame.py", line 3199, in query res = self.eval(expr, **kwargs) File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pandas/core/frame.py", line 3315, in eval return _eval(expr, inplace=inplace, **kwargs) File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pandas/core/computation/eval.py", line 322, in eval parsed_expr = Expr(expr, engine=engine, parser=parser, env=env, truediv=truediv) File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pandas/core/computation/expr.py", line 830, in __init__ self.terms = self.parse() File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pandas/core/computation/expr.py", line 847, in parse return self._visitor.visit(self.expr) File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pandas/core/computation/expr.py", line 437, in visit raise e File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pandas/core/computation/expr.py", line 431, in visit node = ast.fix_missing_locations(ast.parse(clean)) File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/ast.py", line 47, in parse return compile(source, filename, mode, flags, File "<unknown>", line 1 売上_(_店舗_)_BACKTICK_QUOTED_STRING ==0 ^ SyntaxError: invalid syntax
hayataka2049

2020/02/16 13:15

pandas0.25.3では同様のエラーになるのが確認できました。1.0.1なら回答の方法で動きました。pip install -U pandas=1.0.1などで更新すればいけるかもしれません(アップデート方法は環境に合わせて変えてください)。 pandasを更新したくない/できない場合はqueryを使うのは諦めることになります。 https://github.com/pandas-dev/pandas/issues/28576
emix

2020/02/16 13:52

そうなんですね。今回はひとまずqueryを使わずにやってみようと思います。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問