sohatach's blog

http://github.com/soha

pandas.read_fwf()の使い方

www.oreilly.co.jp
Think Stats 第2版を読んでいます。

冒頭でサンプルデータを読み込んでいる

import nsfg
df = nsfg.ReadFemPreg()

の中で実行されている
pandas.read_fwf()
http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_fwf.html
の意味が公式ドキュメントを見てもさっぱり分からなかったので実際に動作確認した結果をメモ。

pandas.read_fwf()
をどんな時に使うかというと、
テキストを区切り文字(カンマやタブなど)で分割するのではなく、固定長で分割し読み込みたい時。
ということのようです。
なおカンマ区切りであれば、read_csv()、タブ区切りであれば、read_table()が使えます。

サンプル

以下のようなinput.txtがあるとする。
特に区切り文字を使用せず、文字の長さで分割してみる。

001 abc A
0002 abcd B
00003 abcde C

import pandas as pd
import numpy as np

#入力ファイル名
filename = 'input.txt'

#ファイルの区切り位置の定義
colspecs = [(0,5),(5,12),(13,14)]

#ファイルを区切った際のカラム名
names = ['key','name','flg']

df = pd.read_fwf('input.txt',colspecs=colspecs,names=names,converters={'key':np.str})

実行結果

index key name flg
0 001 00003 A
1 0002 abcde B
2 00003 abcde C

colspecs = [(0,5),(5,12),(13,14)]
の位置で分割した形でDataFrameが取得できます。