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

Advent Calendar 2013 - 8

Python で解析! - DataFrame 5

今回は DataFrame の保存。計算の途中経過や結果をファイルに保存しておくことができる。

1. データの準備

では、いつもの通りのデータの準備を。

import pandas as pd

df = pd.DataFrame({
   u'名前': [u'山田', u'鈴木', u'佐藤', u'木村'],
   u'性別': [u'男', u'男', u'女', u'女'] ,
   u'身長': [181, 173, 159, 164],
   u'体重': [79, 71, 51, 52]
})
   体重  名前 性別   身長
0  79  山田    181
1  71  鈴木    173
2  51  佐藤    159
3  52  木村    164

2. バイナリ形式のセーブ

DataFrame はそのまま保存できる。

df.save('hoge.pickle')

…が、save すると "save is deprecated, use to_pickle" と警告が表示されるので、to_pickle の方を使うようにする。

df.to_pickle('hoge.pickle')

保存したファイルを読み込む場合は read_pickle を使う。

df2 = pd.read_pickle('hoge.pickle')
df2
   体重  名前 性別   身長
0  79  山田    181
1  71  鈴木    173
2  51  佐藤    159
3  52  木村    164

再現できた。

3. テキスト形式のセーブ

to_csv でテキスト形式で保存できる。

df.to_csv('hoge.csv')

日本語を含む場合は、encoding を指定する。

df.to_csv('hoge.csv', encoding='utf-8')
!cat hoge.csv

,体重,名前,性別,身長
0,79,山田,男,181
1,71,鈴木,男,173
2,51,佐藤,女,159
3,52,木村,女,164

タブ区切りなら、sep を指定する。

df.to_csv('hoge.tsv', encoding='utf-8', sep='\t')
!cat hoge.tsv
     体重      名前      性別      身長
0    79      山田             181
1    71      鈴木             173
2    51      佐藤             159
3    52      木村             164

4. Excel 形式ののセーブ

Excel 形式でも保存できるが、そのためには xlwt をインストールしておく必要がある。

$ pip install xlwt

テキスト形式の保存より、少し手間がかかるが、次のような手順で Excel 形式で保存できる。

xl = pd.ExcelWriter('hoge.xls')
df.to_excel(xl, 'Sheet1')
xl.save()

!ls -l hoge.xls

-rw-r--r-- 1 tokutomi staff 5632 12 8 09:27 hoge.xls

pythonista ならこう書きたいところだが…。

with(pd.ExcelWriter('hoge.xls')) as xl:
  df.to_excel(xl, 'Sheet1')

"AttributeError: __exit__" とのことで、with には対応してないようだ。残念…。

そういえば、さらっと '!cat' や '!ls' のようにシェルコマンドを書いているが、 ipython から抜けずにシェルコマンドを使えて便利である。実は先頭の '!' を付けずに 'ls' とだけしても使えるのだが、同じ変数名があったりなどすると、そちらが優先されるので、 '!' を付けて実行する方が確実だろう。

今回は、こんなところで。