前提・実現したいこと
pandasを使って列と行数が異なる以下のような2つのcsvファイルから一致するデータを取り出すという作業を行う中でエラーが発生しました。
以下の場合だと、data.csv内の都道府県名の列をsamp_address.csvの都道府県の列と比較して、一致すると出力を行いたいのですが、書いたコードだとうまく動きませんでした。
この場合、どのようにすれば解決できますでしょうか?
data.csv
A 111 ok 東京都
B 222 ok 福岡県
C 333 ok 神奈川県
D 444 NG 北海道
samp_address.csv
団体コード 都道府県名(漢字)
10006 北海道
130001 東京都
470007 沖縄県
発生している問題・エラーメッセージ
Traceback (most recent call last): File "/Users/aaaaa/bbbbb/test/cccccccc/APPS/sample2.py", line 11, in <module> print(df[df.query('address.str.contains(@address)')]) File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/pandas/core/frame.py", line 4060, in query res = self.eval(expr, **kwargs) File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/pandas/core/frame.py", line 4191, in eval return _eval(expr, inplace=inplace, **kwargs) File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/pandas/core/computation/eval.py", line 348, in eval parsed_expr = Expr(expr, engine=engine, parser=parser, env=env) File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/pandas/core/computation/expr.py", line 806, in __init__ self.terms = self.parse() File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/pandas/core/computation/expr.py", line 825, in parse return self._visitor.visit(self.expr) File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/pandas/core/computation/expr.py", line 411, in visit return visitor(node, **kwargs) File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/pandas/core/computation/expr.py", line 417, in visit_Module return self.visit(expr, **kwargs) File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/pandas/core/computation/expr.py", line 411, in visit return visitor(node, **kwargs) File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/pandas/core/computation/expr.py", line 420, in visit_Expr return self.visit(node.value, **kwargs) File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/pandas/core/computation/expr.py", line 411, in visit return visitor(node, **kwargs) File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/pandas/core/computation/expr.py", line 705, in visit_Call return self.const_type(res(*new_args, **kwargs), self.env) File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/pandas/core/strings/accessor.py", line 116, in wrapper return func(self, *args, **kwargs) File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/pandas/core/strings/accessor.py", line 1153, in contains if regex and re.compile(pat).groups: File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/re.py", line 251, in compile return _compile(pattern, flags) File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/re.py", line 293, in _compile return _cache[type(pattern), pattern, flags] TypeError: unhashable type: 'DataFrame'
該当のソースコード
# # -*- coding: utf-8 -*- import pandas as pd #data.csvの呼び出し df = pd.read_csv('data.csv',names=["name","ID","check","address"]) # samp_address.csvの呼び出し address = pd.read_csv("samp_address.csv", usecols=[1]) # data内にaddress要素があれば抽出 print(df[df.query('address.str.contains(@address)')])
試したこと
isin()も試してみたのですが、
Empty DataFrame
Columns: [name, ID, check, address]
Index: []
となりました。
補足情報(FW/ツールのバージョンなど)
実際に使用している2つのcsvファイルはもっと大きいです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/12/22 01:41
2021/12/22 01:54