本記事ではapplymap()
を使用した以下の内容を解説しています.
- DataFrameにあるテキストの文字数をカウント
- DataFrameの各要素に何らかの処理を適用する
公式 Reference: pandas.DataFrame.applymap
事前準備
まずはサンプルのDataFrameを作成します.
import pandas as pd
# DataFrameの作成
df = pd.DataFrame({
'Crab': ['たらばがに', '毛ガニ', '松葉がに'],
'Shrimp': ['くるまえび', 'オニテナガエビ', '桜エビ']
})
df
Crab | Shrimp | |
---|---|---|
0 | たらばがに | くるまえび |
1 | 毛ガニ | オニテナガエビ |
2 | 松葉がに | 桜エビ |
DataFrame の各要素の文字数をカウント
applymap()
は引数の処理をDataFrameの各要素に適用させ,DataFrameを返す関数です.
今回は要素の文字数をカウントしたいので,引数に文字数をカウントする関数を指定します.1
# applymap関数を使用して各要素の文字数をカウント
# 戻り値はDataFrame
df_count = df.applymap(lambda x: len(x))
df_count
Crab | Shrimp | |
---|---|---|
0 | 5 | 5 |
1 | 3 | 7 |
2 | 4 | 3 |
各要素の文字数がカウントされたDataFrameとして返ってきていますね.
注意
要素に欠損値が含まれる場合,欠損値が文字列として認識されるので注意してください.
これを防ぐにはapplymap()
の引数にna_action='ignore'
を指定しましょう.
より複雑な処理を適用させることも可能
別途関数を定義し,それを各要素に適用させることもできます.
applymap()
の引数に指定する際は関数名だけでOKです.
文字列を変換・置換する処理を定義した関数の例を見てみましょう.
# 別途関数を定義して適用することも可能
# 一旦カタカナをひらがなに変換 → 文字列置換
import re
import jaconv
def test_func(x):
hiragana = jaconv.kata2hira(x)
replaced_text = re.sub('えび', '', hiragana)
return replaced_text
# 関数名だけを指定
df.applymap(test_func)
Crab | Shrimp | |
---|---|---|
0 | たらばがに | くるま |
1 | 毛がに | おにてなが |
2 | 松葉がに | 桜 |
applymap()
で指定したtest_func()
関数は「えび(エビを含む)」を取り除く関数なので,各要素に関数を当てることで「えび(エビ)」が取り除かれていますね.
参考
jaconv
ライブラリのkata2hira()
「カタカナ」を「ひらがな」に変換する関数です.
なおjaconv
は外部ライブラリなのでインストールが必要です.
コードの詳細が知りたい方はこちらをクリック
test_func(x)
関数は「えび(もしくはエビ)」という文字を削除する関数です.
処理は以下のとおりです.
- 引数の文字列を
jaconv.kata2hira()
でひらがなに変換 - 変換した文字列に「えび」が含まれる場合はその文字を削除
- 処理した文字列を返す
re.sub('えび', '', hiragana)
で「えび」の削除を行なっています.
re.sub()
は第一引数の文字列を第二引数の文字列に変換する関数です.(第三引数は置換対象のデータを指定します)
ひとこと
DataFrame の各要素に対して何らかの処理をしたい時に使えるapplymap()
を紹介しました.
applymap()
は便利ですが,処理速度が遅いです.
そのため,巨大なDataFrameに適用する際は時間も気にしておくと吉ですね.
-
lambdaを使用して,引数にとった文字の数を
len()
でカウントしています. ↩