<Python, pandas> コマンドラインの出力を取り込み、データフレーム(DataFrame)へ

コマンドライン command lineの出力をpipeして、データフレームDataFrameへ取り込む方法。

いろいろ調べた結果下記で実行可能っぽい。

In [1]: %more aaa.csv
a,b,c,
1,2,3,
4,5,6,

In [2]: import subprocess

In [3]: import pandas as pd

In [4]: import io

In [5]: subprocess.check_output('cat aaa.csv')
Out[5]: b'a,b,c,\n1,2,3,\n4,5,6,\n\n'

In [6]: subprocess.check_output('cat aaa.csv', universal_newlines=True)
Out[6]: 'a,b,c,\n1,2,3,\n4,5,6,\n\n'

In [7]: f = subprocess.check_output('cat aaa.csv', universal_newlines=True)

In [8]: pd.read_csv(io.StringIO(f))
Out[8]: 
   a  b  c  Unnamed: 3
0  1  2  3         NaN
1  4  5  6         NaN

ポイントその1

subprocessを使う。 os.systemはもう古いらしい。。。

ポイントその2

universal_newlines=Trueとする。 しないとbyteでデータが返ってくる。

ポイントその3

io.StringIO()が必要。

勉強したリンク君たち、

17.5. subprocess — サブプロセス管理 — Python 3.4.2 ドキュメント

16.2. io — ストリームを扱うコアツール — Python 3.4.2 ドキュメント

IO Tools (Text, CSV, HDF5, ...) — pandas 0.16.0-81-g9e4e447 documentation