pagetakaBlog

最近リフォームと鳥取県日南町の記事多め。写真、PC、ネット等の話題も

Python:Dataframeから書き出したのは普通のListじゃなかった。tolist()で解決

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のリストで渡り、エラーになっていた場所で止まらず、無事作業完了になりました。やれ・やれ...。