コーディングのみならず、表示する文字列において、たとえ漢字やひらがなが混じっていても、(数字などを含む)アルファベット文字はいわゆる半角文字 "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 ファイルを読み込むために openpyxl と xlrd をあらかじめインストールしておく必要があります [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] で紹介されています。
参考サイト
- Pythonで全角・半角を変換(mojimojiなど) | note.nkmk.me
- unicodedata --- Unicode データベース — Python ドキュメント
- pandasでExcelファイル(xlsx, xls)の読み込み(read_excel) | note.nkmk.me
- Unicode正規化 - Wikipedia
- Unicode正規化 #文字コード - Qiita [2020-05-15]

にほんブログ村
#オープンソース


0 件のコメント:
コメントを投稿