[python]pandasで文字列を加工する

3 min read読了の目安(約2700字

やりたいこと

  • csvをpandasで読み込む。
  • あるカラムの文字列データを加工して別のカラムに追加する。
  • あるカラムの文字列データを加工して元々のカラムに上書きする。
  • 文字列の加工は正規表現も使う。

環境

  • Anaconda + Jupyter Notebook

CSVの準備

たとえば次のようなCSVを作成しておく。

sample1.csv

uid,name
1,"大和賢一郎"
2,"福山雅治"
3,"小栗旬"
4,"YOSHIKI"

pandasでCSVを読み込む

名前の先頭二文字だけを切り出す

n1 = df['name'].str[:2]

切り出した文字列を新規カラムとして追加する

df['new_name'] = df['name'].str[:2]

切り出した文字列を元々のカラムに上書きする

df['name'] = df['name'].str[:2]

名前の末尾3文字だけを切り出す

n2 = df['name'].str[-3:]

名前の先頭から一文字目だけを切り出す

n3 = df['name'].str[0]

名前の先頭から二文字目だけを切り出す

n4 = df['name'].str[1]

名前の先頭二文字目から三文字目までを切り出す

n5 = df['name'].str[1:3]

CSVの準備

つづいて、次のようなCSVを作成しておく。

sample2.csv

uid,name
1,"GAQ1892ZA"
2,"09010GALE"
3,"kAKAK21099KKK"
4,"BQQQ81788"

pandasで読み込む

名前から数字のみを切り出す

n1 = df['name'].str.extract('(\d+)', expand=True)

名前に含まれる 'A' を 'あ' に置換する

n2 = df['name'].str.replace('A','あ')

名前に含まれる数字を削除する

n3 = df['name'].str.replace('\d','')

CSVの準備

つづいて、次のようなCSVを準備しておく。

sample3.csv

uid,name
1,"大和 賢一郎"
2,"大和 賢一郎"
3,"大 和 賢 一 郎"
4,"大   和   賢  一  郎"

半角スペースと全角スペースをわざと混在させている。
エディタで見ると下記。

名前に含まれるスペース(全角も半角も)を黒丸に置換する

n1 = df['name'].str.replace('\s', '●')

名前に含まれるスペース(全角も半角も)を削除する

n2 = df['name'].str.replace('\s', '')