ListのようでListじゃない、それは何かと尋ねたら..ndarray...というお話です。
Pythonでスクリプト書いてて、ドツボにはまりました。その顛末です。
PandasのDataframe(df)を使ってました。その項目xを抽出し重複排除した値を得ようと思いました。
xs = df['x'].unique()
['大阪','兵庫','京都','兵庫']の値から、['大阪','兵庫','京都']を得たいという妄想です。これは、print文で確認できました。
xsに['大阪','兵庫','京都']を収め、次のスクリプトへ渡したつもりで、動かすとエラーになりました。次のスクリプトでもxsの値を確認できました。しかし、とあるところでエラーになりました。
xsを、RDB(MariaDB)からデータ取得する際のプレースホルダーに使ったところでNGに...。
関係するSQL文の前にxsを表示すると確かにある。後に、結果を表示する際に取得数を表示する前にエラーになる。
となると、
- プレースホルダ―への代入失敗
- SQL文への置き方が悪い
なのかと思いつつ、点検を始めるものの不明な爺。
類似処理をしている別スクリプトは動いている。混沌の世界に引きずり込まれる痴呆老人。
PythonのListでなく、NumPyのndarray(numpy.ndarray)だった
はた、と思い立ったのが、型の違いではないか...との妄想。
型チェックしたら、別スクリプトでは単にPythonのList、一方、xsはNumpyのリストでした。「もしかして、Numpyリストから、Pythonリストに変換したらイイんじゃネ?」と末尾に「.tolist()」を加えました。
xs = df['x'].unique().tolist()
これで動かしてみたら、次のスクリプトにPythonのリストで渡り、エラーになっていた場所で止まらず、無事作業完了になりました。やれ・やれ...。