今回はPandasで固定長ファイルを読み込む方法を紹介します。
固定長とは
固定長データは、その名の通りデータの長さが固定の形式です。各レコードの長さが一定の長さに設定されており、各フィールドにはその長さの中で一定の桁数が与えられます。
固定長データの例を以下に挙げます。ヘッダは見やすいように付与していますが、実際の固定長データには存在しません。各フィールドには一定の桁数が与えられているため、余剰分はスペース(空白)が入ります。
※例では、*としていますが、実際はスペースが入ります。
例では顧客IDに6桁、氏名に14桁が与えられています。
顧客ID 氏名 性別 生年月日 住所 電話番号
---------------------------------------------------------------------------------------------
00001*山田太郎**********男****19800101**〒100-0001*東京都千代田区**03-1234-5678
00002*田中花子**********女****19900202**〒200-0002*東京都渋谷区**04-8765-4321
00003*佐藤一郎**********男****20000303**〒300-0003*東京都新宿区**05-9876-5432
固定長データはシンプルで高速処理に適している一方で、データの柔軟性に難があり、データ構造の変更が容易ではありません。
かつては扱えるデータ量も大きくなかったため、決まったデータ量で扱える固定長データはよく使われていました。近年はハードのスペックが向上したこともあり、情報量を拡張できる形式(csvやtsv等)でデータを扱う機会が多くなっています。
それでも固定長データが絶滅したわけではありません。実際に、SAPでもデータ出力は固定長だったりします。そういったわけで、データ分析の中でも固定長データを扱う可能性はあります。そこで、以降はPandasで固定長データを読み込む方法を紹介します。
Pandas固定長データを読み込む
Pandasで固定長データを読み込むにはread_fwf()を使用します。
例として以下の固定長ファイルを読み込んでみます。
C000000001山田太郎 30M〒100-0001東京都千代田区千代田1-1-1
C000000002東京花子 25F〒100-0001東京都千代田区千代田1-1-2
import pandas as pd
filepath = 'input/sample.dat' # ファイルパス
encoding = 'shift-jis'
colspecs = [
(0, 10), # 顧客ID: 開始位置0、幅10バイト
(10, 19), # 氏名: 開始位置10、幅9バイト
(19, 21), # 年齢: 開始位置19、幅2バイト
(21, 22), # 性別: 開始位置21、幅1バイト
(22, 46), # 住所: 開始位置22、幅24バイト
]
df = pd.read_fwf(
filepath,
colspecs=colspecs,
encoding=encoding,
errors='ignore' # 読み込みエラーを無視 (必要に応じて設定)
)
colspecsでは各フィールドの長さをタプルの配列で指定します。encodingとerrorsは任意の引数となっており、必須の引数は読込ファイルのパスと区切り位置(colspecs)です。
結果、以下のように読み込まれます。
まとめ
Pandasで固定長データを読み込む方法を紹介しました。Pandasは非常に便利で、様々なフォーマットのデータに対応しています。固定長ファイル利用の際はご活用ください。
ではでは👋