<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