トップページに戻る

Pandas―データ分析(4)ファイル入出力

Pandasにおけるファイル入出力

Pandasのファイル入出力は非常に強力で、多くのファイル形式に対応しています。
Pandas公式HP(英語)を見ると、

  • CSV
  • JSON
  • HTML
  • MS Excel
  • HDF5 Format
  • Feather Format
  • Parquet Format
  • Msgpack
  • Stata
  • SAS
  • Python Pickle Format
  • SQL
  • Google Big Query

に対応していて、読み込みはもちろん、書き込みもほとんどのファイル形式でできるようです。

In [1]:
import pandas as pd
In [2]:
# ファイル読み込みの代わり
from io import StringIO

CSVファイル

In [3]:
data = """col1, col2, col3
123, a, 9.0
456, b, 1.e2
789, c, 50.99
"""
pd.read_csv(StringIO(data))
Out[3]:
col1 col2 col3
0 123 a 9.00
1 456 b 100.00
2 789 c 50.99

ヘッダーがない場合は、そう言わなければなりません。

In [4]:
# ヘッダーがない場合
data = """123, a, 9.0
456, b, 1.e2
789, c, 50.99
"""
df = pd.read_csv(StringIO(data), header=None)
df
Out[4]:
0 1 2
0 123 a 9.00
1 456 b 100.00
2 789 c 50.99

read_csvには、様々なオプション引数を与えられます。
Pandasのread_csvの全引数を解説で、必要なオプションを設定してください。

テキスト出力

出力は、to_××という名前の関数を使ってください。

In [5]:
# CSVに出力
df.to_csv()
Out[5]:
',0,1,2\n0,123, a,9.0\n1,456, b,100.0\n2,789, c,50.99\n'
In [6]:
# HTMLに出力
df.to_html()
Out[6]:
'<table border="1" class="dataframe">\n  <thead>\n    <tr style="text-align: right;">\n      <th></th>\n      <th>0</th>\n      <th>1</th>\n      <th>2</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>123</td>\n      <td>a</td>\n      <td>9.00</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>456</td>\n      <td>b</td>\n      <td>100.00</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>789</td>\n      <td>c</td>\n      <td>50.99</td>\n    </tr>\n  </tbody>\n</table>'

バイナリ入出力

pickle

Python特有のバイナリファイル形式として、pickleというものがあります。
”漬物”という意味で、その名の通り、オブジェクトを漬物のように保存することができます。
解析結果をDataFrameの情報を保ったまま保存したり、それを復元したりすることができるので、解析を中断したりするときに非常に便利です。
特に、Pandasのcolumnsやindex, dtypesの情報なども全て保つことができるため、もともとのDataFrameと全く同じものが復元できます。
CSVといったテキストファイルに出力すると、他の人との共有する場合には適していますが、そういったメタ情報は抜け落ちてしまうため、自分だけで使用する一時的なファイルを作る場合は積極的にpickleで保存していくとよいかと思います。

注意点

pickleはバージョンによって互換性がない場合があります。
他の環境にファイルを渡す場合には、pickleファイルを使わず、テキストファイルなどを用いるようにしましょう。

In [7]:
df
Out[7]:
0 1 2
0 123 a 9.00
1 456 b 100.00
2 789 c 50.99

保存はto_pickleです。

In [8]:
df.to_pickle("mydata.pickle")

読み込みはread_pickleです。

In [9]:
pd.read_pickle("mydata.pickle")
Out[9]:
0 1 2
0 123 a 9.00
1 456 b 100.00
2 789 c 50.99

誤字やおかしい点などがあったら @zawawahoge (Twitter) にお気軽にご連絡ください。

トップページに戻る