見出し画像

[Python] pandas 特定の列に関数を適用する

はじめに

pandasを使って、特定の列に関数を適用する実装を行います。

今回は、名簿(CSVファイル)の「名前(カタカナ)」の列に対して、ローマ字変換した列を新規に追加する、という処理を行います。

Pythonで、日本語からローマ字変換する実装については、下記でまとめています。

使用する名簿のデータは、「個人情報テストデータジェネレーター」を使用してダミーデータ作成しました。

使用するライブラリ

pandas

データ分析、機械学習の実装で最も使用されるライブラリです。

pykakasi

漢字(ひらがな、カタカナ)をローマ字に変換するライブラリです。

動作環境

・windows10
・Jupyter Notebook 6.4.3
・Python 3.8.11

実装

全体のコードは、下記です。

import pandas as pd
import pykakasi

kakasi = pykakasi.kakasi()

def convert_kana_2_romaji(text):
   """ 
		カタカナをローマ字に変換する
		Parameters
   ----------
   text: str
       変換したい文字列。
		Returns
   -------
   name : str
       ローマ字変換した文字列。
   """
   result_list = kakasi.convert(text)
   name = ''.join([result['passport'].upper() for result in result_list])
   return name

# csvファイル読み込み
df = pd.read_csv('./dummy.csv')

# ローマ字変換して、新規の列に追加
df['氏名(ローマ字)'] = df['氏名(カタカナ)'].map(convert_kana_2_romaji)

使用する名簿のデータの列は、下記です。
・氏名
・氏名(ひらがな)
・氏名(カタカナ)
・メールアドレス
・電話番号

画像1

処理の流れは、
・CSVファイルの読み込み
・「氏名(カタカナ)」列に対して、カタカナをローマ字に変換する関数を適用
・適用した結果を、「氏名(ローマ字)」列に新規追加
となります。

pandasの行、列に関数を適用する

pandasのDataFrame、Seriesに対して、関数を適用する場合、
・Numpyの関数
・自分で作成した関数(無名関数も含む)
の2つのパターンで設定することができます。

DataFrameの各要素、つまりすべての行、列に対して関数を適用する場合、
map
apply
のいずれかのメソッドを使用することができます。

しかし、今回のケースのように、特定の行に対して関数を適用することはできないため、方法としては、
・列を選択し、行をSeriesとして取得
・取得した行に対して、map、applyのいずれかのメソッドを使って関数を実行
・適用した結果を、特定列に上書き、もしくは列を新規追加
となります。

今回の実装だと、下記のコードになります。

df['氏名(ローマ字)'] = df['氏名(カタカナ)'].map(convert_kana_2_romaji)

mapメソッドの戻り値は、関数を適用したSeriesです。

map,applyの違い

関数が使用できるオブジェクトが異なります。
・map…Seriesで使用可能
・apply…Series、DataFrameの各行・列で使用可能

まとめ

今回は、Pythonのpandasを使って、特定の列に関数を適用する実装を行いました。
map,applyメソッドを使用して実行することで、for文を使って処理するよりも、処理時間が早いこと、実装コードが短いことがメリットになります。

参考サイト











この記事が気に入ったらサポートをしてみませんか?