Python で解析 8
“Advent Calendar 2013 - Python で解析!” の八日目。DataFrame - 5
1. お決まりの準備を…
今回は DataFrame の保存だが、その前に例によって準備を。
In [1]: import pandas as pd In [2]: df = pd.DataFrame({ ...: u'名前': [u'山田', u'鈴木', u'佐藤', u'木村'], ...: u'性別': [u'男', u'男', u'女', u'女'] , ...: u'身長': [181, 173, 159, 164], ...: u'体重': [79, 71, 51, 52] ...: }) In [3]: df Out[3]: 体重 名前 性別 身長 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 を使う。
In [5]: df2 = pd.read_pickle('hoge.pickle') In [6]: df2 Out[6]: 体重 名前 性別 身長 0 79 山田 男 181 1 71 鈴木 男 173 2 51 佐藤 女 159 3 52 木村 女 164
再現できた。
3. テキスト形式のセーブ
to_csv でテキスト形式で保存できる。
df.to_csv('hoge.csv')
日本語を含む場合は、encoding を指定する。
In [9]: df.to_csv('hoge.csv', encoding='utf-8') In [10]: !cat hoge.csv ,体重,名前,性別,身長 0,79,山田,男,181 1,71,鈴木,男,173 2,51,佐藤,女,159 3,52,木村,女,164
タブ区切りなら、sep を指定する。
In [11]: df.to_csv('hoge.tsv', encoding='utf-8', sep='\t') In [12]: In [10]: !cat hoge.tsv 体重 名前 性別 身長 0 79 山田 男 181 1 71 鈴木 男 173 2 51 佐藤 女 159 3 52 木村 女 164
4. Excel 形式ののセーブ
Excel 形式でも保存できるが、そのためには xlwt をインストールしておく必要がある。
$ pip install xlwt
テキスト形式の保存より、少し手間がかかるが、次のような手順で Excel 形式で保存できる。
In [13]: xl = pd.ExcelWriter('hoge.xls') In [14]: df.to_excel(xl, 'Sheet1') In [15]: xl.save() In [16]: !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' とだけしても使えるのだが、同じ変数名があったりなどすると、そちらが優先されるので、 '!' を付けて実行する方が確実だろう。
今回は、こんなところで。