あれもPython,これもPython

Pythonメモ※本サイトはアフィリエイトを利用しています

Pandasで文字列を別カラムに分割したり、逆に結合したい

姓名のデータや電話番号など、特定のパターンでカラムを分割したいことがあります。

str.partition

str.partitionはデフォルトだとスペースで3つのカラム(一番左、スペース、残り)のデータフレームに分けます。

また、引数で文字列を渡せば、その文字を二番目に3つのカラムのデータフレームに分けます。

import pandas as pd

s = pd.Series(
  [
    'xxx xxxx',
    'yyy yyyy'
  ]
)

s.str.partition()

#右から分ける場合
#s.str.rpartition()

str.split

str.splitも同様の挙動ですが、デフォルトだとスペース部分で分けたリストを一つのカラムに入れます。

これだと多すぎて困る場合はn変数でいくつまでを分けるかを指定できます。

カラムを分けたい場合はexpand=Trueを指定します。

partitionとの違いは分割文字patを残さないことです。

s.str.split()

#右から、-で最高4つに分ける場合
#s.str.rsplit(pat='-',n=4,expand=True)

逆の動き(結合)

結合したい場合、列通しの足し算やstr.catなどもありますが、現実の場では、複数の同時結合をしたい、とかになると思うので、applylambdajoinを突っ込んだ方が楽です。

df['col1'] + df['col2']

df['col1'].str.cat(df['col2'],sep='-')

df[['col1','col2']].apply(lambda x : ''.join(x),axis=1)