文字列処理

Unicode 正規化

補足 この機能は pandas 0.16.1 標準にポーティングされました。API は unicodedata.normalize と同一です。引数 form を省略することはできなくなるため注意してください。

Series.str.normalize は、標準の unicodedata.normalize と同じ処理を Series の値に対して行います。

>>> import pandas as pd
>>> s = pd.Series([u'アイウエオ', u'カキクケコ', u'ガギグゲゴ', u'ABCDE'])
>>> s
0         アイウエオ
1         カキクケコ
2    ガギグゲゴ
3         ABCDE
dtype: object

>>> s.str.normalize('NFKC')
0    アイウエオ
1    カキクケコ
2    ガギグゲゴ
3    ABCDE
dtype: object

引数として、unicodedata.normalize と同じフォーマットを渡すことができます。

  • NFC: 正規形 C。
  • NFKC: 正規形 KC。
  • NFD: 正規形 D。
  • NFKD: 正規形 KD。
>>> s.str.normalize('NFD')
0         アイウエオ
1         カキクケコ
2    ガギグゲゴ
3         ABCDE
dtype: object

全角/半角変換

Series.str.z2h で値を 全角文字から半角文字へ変換、 Series.str.h2z で値を 半角文字から全角文字へ変換できます。

>>> s = pd.Series([u'アイウエオ', u'ABC01', u'DE345'])
>>> z = s.str.h2z()
>>> z
0    アイウエオ
1    ABC01
2    DE345
dtype: object

>>> z.str.z2h()
0    アイウエオ
1    ABC01
2    DE345
dtype: object

変換の対象とする文字のグループはキーワードオプションで変更できます。それぞれのキーワードについて対象となる文字列は以下の通りです。デフォルトでは全て True で、全ての文字が変換されます。変換したくないグループがある場合は 対応するキーワードに False を指定してください。

補足 kana には日本語の記号 (句読点) も含まれることに注意してください。

  • kana: ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノ ハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロワヲンヴー・「」。、
  • alpha: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
  • digit: 0123456789
  • symbol: !"#$%&'()*+,"-./:;<=>?@[\]^_`~{|}
>>> s = pd.Series([u'アイウエオ', u'ABC01', u'DE345'])

# アルファベットは全角にしない
>>> s.str.h2z(alpha=False)
0    アイウエオ
1    ABC01
2    DE345
dtype: object

# カナ、アルファベットは全角にしない
>>> s.str.h2z(kana=False, alpha=False, digit=True)
0    アイウエオ
1    ABC01
2    DE345
dtype: object

# カナ、アルファベット、数値は全角にしない = 記号以外は半角のまま
>>> s.str.h2z(kana=False, alpha=False, digit=False)
0    アイウエオ
1    ABC01
2    DE345
dtype: object