【pandas】DataFrame 要素の文字数をカウントする方法(applymap)

本記事では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)関数は「えび(もしくはエビ)」という文字を削除する関数です.
処理は以下のとおりです.

  1. 引数の文字列をjaconv.kata2hira()でひらがなに変換
  2. 変換した文字列に「えび」が含まれる場合はその文字を削除
  3. 処理した文字列を返す

re.sub('えび', '', hiragana)で「えび」の削除を行なっています.
re.sub()は第一引数の文字列を第二引数の文字列に変換する関数です.(第三引数は置換対象のデータを指定します)

ひとこと

DataFrame の各要素に対して何らかの処理をしたい時に使えるapplymap()を紹介しました.
applymap()は便利ですが,処理速度が遅いです.
そのため,巨大なDataFrameに適用する際は時間も気にしておくと吉ですね.


  1. lambdaを使用して,引数にとった文字の数をlen()でカウントしています.