2025-02-24

【備忘録】アルファベット文字の全角 → 半角変換 ~ Python

コーディングのみならず、表示する文字列において、たとえ漢字やひらがなが混じっていても、(数字などを含む)アルファベット文字はいわゆる半角文字 "ABC" を使うようにしています。しかし、公開されているファイルを読み込んで集計するときなどで、アルファベット文字に全角文字が使われていて無駄に表示文字列の幅が長くなってしまうとイラっとするときがあります。😅

アルファベットの全角文字を半角文字に変換するために変換テーブルを作って対応していましたが、あらためて調べたところ Python の標準ライブラリ unicodedata で変換できることを参考サイト [1] で知ったので、具体例を備忘録にしました。

下記の OS 環境で動作確認をしています。

Fedora Linux 41 Workstation x86_64
Python 3.13.2
jupyterlab 4.3.5
openpyxl 3.1.5
pandas 2.2.3
xlrd 2.0.1

以下の作業は JupyterLab 上でおこなっています。

最初に必要なライブラリをインポートします。

import unicodedata
import pandas as pd

今回の例では、インターネット上の Excel ファイルを読み込むので、import 文で明示しませんが、pandas で Excel ファイルを読み込むために openpyxlxlrd をあらかじめインストールしておく必要があります [3]

例として、東京証券取引所に上場している銘柄のリスト(Excel ファイル)を取得します。

tse = "https://www.jpx.co.jp/markets/statistics-equities/misc/tvdivq0000001vg2-att/data_j.xls"
df = pd.read_excel(tse)
df

 

「銘柄名」列の文字列は全て全角文字になっています。この列の文字列をアルファベット文字のみ半角文字に置き換えます。

df['銘柄名'] = [unicodedata.normalize('NFKC', s) for s in df['銘柄名']]
df

 

Unicode の正規化については、参考サイト [4] に日本語表現や説明がありますが、そのまま引用してもピンとこないので、正規化には下記の4種類があることを示すにとどめました。

form 正規化形式
NFC Normalization Form Canonical Composition
NFKC (Normalization Form Compatibility Composition
NFD Normalization Form Canonical Decomposition
NFKD Normalization Form Compatibility Decomposition

四種類の具体的な違いについては、参考サイト [5] で紹介されています。

参考サイト

  1. Pythonで全角・半角を変換(mojimojiなど) | note.nkmk.me
  2. unicodedata --- Unicode データベース — Python ドキュメント
  3. pandasでExcelファイル(xlsx, xls)の読み込み(read_excel) | note.nkmk.me
  4. Unicode正規化 - Wikipedia
  5. Unicode正規化 #文字コード - Qiita [2020-05-15]

 

ブログランキング・にほんブログ村へ bitWalk's - にほんブログ村 にほんブログ村 IT技術ブログ オープンソースへ
にほんブログ村

オープンソース - ブログ村ハッシュタグ
#オープンソース



このエントリーをはてなブックマークに追加

0 件のコメント: