python pandas データフレームの日本語で、文字の検索・置換がうまくいかない

m2jのデータを加工するのに、通貨ペアの名前が
‘USD/JPY’だったり’USDJPY’だったりするので統一したい。

とりあえず、さくっと書いてみたけど、
思ったように動作しなくて、データフレームが壊れてしまう。

数字はちゃんと変換されるので、文字コード関係かも知れない。
Shift-JISで使いたいからなぁ。。。

replaceには、encodingオプションなどないし。
ファイルから読み込む時に、str型に変換してしまっているし。

もう少し見てみると。
中でUnicodeに変換するのに失敗しているみたい。

試しに、unicodeのデータフレームを作ってみたら、
正しく検索や置換が動作ることを確認した。

わざわざstr型に変換してみたけれど、
やっぱりUnicodeに統一するのが正解みたいだ。

という訳で。
Pythonの文字コードの扱いについて調べてみた。

PythonのUnicodeEncodeErrorを知る
http://lab.hde.co.jp/2008/08/pythonunicodeencodeerror.html

とは言え。
外のShift JISなcsvファイルからpandasに読み込むときには
どうするのが良いのかな。

read_csvした直後は、もうstr型になってしまっているし。

全部の要素をチェックするループを書くのはチョット。。。
なので、Series用のstr アクセサを書くのが、妥当そう。

strアクセサは、 内部のデータ型が文字列(str か unicode ) 型のとき、
その要素に対して、一通りの文字列用メソッドを適用することができる。

使えるstrアクセサ一覧
http://pandas.pydata.org/pandas-docs/stable/api.html#string-handling

当然、encodeやreplaceもあった。

例えば

これで、文字列の要素がUnicodeに置き換わって、必要な文字置換も完了。

アクセサを使わないで文字列検索や置換を行なう時には、
encode(‘cp932’)しなくても動作するのに。

知らないとハマるよね、コレ。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です