【Pandas】固定長データを読み込む

今回は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)です。

結果、以下のように読み込まれます。

df

まとめ

Pandasで固定長データを読み込む方法を紹介しました。Pandasは非常に便利で、様々なフォーマットのデータに対応しています。固定長ファイル利用の際はご活用ください。

ではでは👋