( New ) 新連載スタート!2人の会話形式でPythonを学ぶ「週末Pythonゆる講座」はこちら ▶▶

ポケモンで学ぶPython|#7 文字列を扱う

ポケモンのデータで学ぶPython

Python(パイソン)というプログラミング言語を、ポケモンという誰もが知っているコンテンツで学んでいく企画です

今回はPythonで「文字列」を扱う方法をご紹介します

  • 文字数を数える
  • 文字列を変換する
  • 文字列を分割する
  • 大文字-小文字変換する
  • 半角-全角変換する

今回利用するデータについてや、Pythonのセットアップは下記記事をご覧ください

ポケモンで学ぶデータ分析|データの中身を知ろう ポケモンで学ぶPython|#1 セットアップを始めよう
ポケモンのデータ一覧

事前準備

Pandasを事前にインポートしておきます

import pandas as pd

ポケモンのデータ(Excel:105 KB)をダウンロードし、Pythonで読み取ってください

# Pokemon_Englishのシートを変数(df)に格納する
df = pd.read_excel('/content/drive/MyDrive/Python/API/pokemon_data.xlsx',
                   sheet_name='Pokemon_English')
df.head()
ポケモンの英語名のイメージ

文字数を数える

名前の文字数を数えてください

df['名前'].apply(lambda x: len(x))
df['名前'].apply(lambda x: len(x))

lenと関数lambdaを組み合わせて、文字数を数えます

名前に「ギ」が入っている数を数えてください

df['名前'].str.count('ギ')
df['名前'].str.count('ギ')

countを活用して特定の文字列を数えます

文字列として扱うためにstrも忘れずに付けてください

名前に「ギ」か「ス」が入っている数を数えてください

df['名前'].str.count('ギ|ス')
df['名前'].str.count('ギ|ス')

指定の文字列に|を使うと、OR条件で検索することができます

英語名のアルファベット(a~z)をそれぞれ数えてください【高難度】

df_alphabet = pd.DataFrame()
for i in [chr(ord("a")+i) for i in range(26)]:
  temp = df['name'].str.count(i)
  df_alphabet[i] = temp

df_alphabet = pd.concat([df[['名前','name']],df_alphabet], axis=1)
df_alphabet.head(10).style.background_gradient()
ポケモンの英語名をアルファベットごとにカウント

「a」から「z」までのアルファベットをリストで用意し、繰り返し処理で26文字分をcountで数えます

別の変数に格納しておき、名前とアルファベットの文字数をconcatで結合します

最後にstyleで色付けすると、非常に見やすくなります

【Python】concat|複数のデータを連結する 【Python】DataFrameを見やすくする方法|style

文字列を変換する

名前の「ヒトカゲ」を「***」に変換してください

df['名前'].replace('ヒトカゲ','***')
df['名前'].replace('ヒトカゲ','***')

replaceを使うと文字列を変換することができます

【Python】replace|データ内容を別の内容で置き換える(置換)

名前の「ギ」を「*」に変換してください

df['名前'].replace('ギ','*',regex=True)
df['名前'].replace('ギ','*',regex=True)

replaceのパラメータregexをTrueとすることで、一部の文字のみを変換することができます

文字列を分割する

名前の「ギ」をもとに文字列を分割してください

df['名前'].str.split('ギ')
df['名前'].str.split('ギ')

splitを活用すると文字列を「分割」することができます

ただこのままだとリスト形式で使いにくいため、次の問題で列を増やします

【Python】区切り文字で文字列を分割する方法|split

名前の「ギ」をもとに文字列を分割し、列を増やしてください

df['名前'].str.split('ギ', expand=True)
df['名前'].str.split('ギ', expand=True)

splitのパラメータexpandをTrueとすることで、分割結果を列として増やすことができます

大文字-小文字変換する

英語名を全て大文字にしてください

df['name'].str.upper()
df['name'].str.upper()

初期値のポケモンの名前(name)はすべて小文字なので、upperを設定して大文字に変換します

strを前に付けないとエラーが出る可能性があるので注意です

【Python】英語の大文字・小文字を変換する方法

英語名を全て小文字にしてください

df['name'].str.lower()
df['name'].str.lower()

すでに全て小文字なので、特に作業は必要ありませんがlowerを使うことで小文字変換ができます

英語名を先頭だけ大文字にしてください

df['name'].str.capitalize()
df['name'].str.capitalize()

capitalizeを使うと最初の文字だけを大文字に変換ができます

半角-全角変換する

半角-全角を変換するにはmojimojiを利用するため、事前にインストール・インポートしておきましょう

!pip install mojimoji
import mojimoji

名前を半角に変換してください

df['名前'].apply(mojimoji.zen_to_han)
df['名前'].apply(mojimoji.zen_to_han)

zen_to_hanを使うと半角-全角の変換を実施することができます

【Python】文字列の全角・半角を変換する方法|mojimoji

まとめ

今回は文字列をPythonで扱う方法についてご紹介してきました

  • 文字数を数える
  • 文字列を変換する
  • 文字列を分割する
  • 大文字-小文字変換する
  • 半角-全角変換する

機械学習モデルの作成で、人の名前から特徴量を算出することがあります

ぜひ覚えて使ってみてください

お気に入り登録お願いします

コメントを残す

メールアドレスが公開されることはありません。