前回の記事で、pandasを使ったテキストデータの読み込み方法を紹介したが、今回はデータを区切り文字で区切られたCSV形式のファイルとして、エクスポートする方法を紹介する。

サンプルファイルの読み込み

前回の記事で作成したサンプルファイル(ex01.csv)を使う。

https://chusotsu-program.com/pandas-textdata-read

# ~/examples/ex01.csv
a,b,c,d,message
1,2,3,4,hoge
5,6,7,8,fuga
9,10,11,12,foo
import pandas as pd

df = pd.read_csv('examples/ex1.csv')
#    a   b   c   d message
# 0  1   2   3   4    hoge
# 1  5   6   7   8    fuga
# 2  9  10  11  12     foo

データフレームをカンマ区切りファイルに出力するto_csvメソッド

データフレームが持つto_csvメソッドは、データをカンマ区切りのファイルに書き出すことができる。

df.to_csv('examples/out.csv')

ターミナルで、書き出したファイルの中身を見てみよう。

cat ~/examples/out.csv

,a,b,c,d,message
0,1,2,3,4,hoge
1,5,6,7,8,fuga
2,9,10,11,12,foo

index・headerオプション

to_csvメソッドの引数に何も指定しないと、行列それぞれのラベルまでファイルに保存される。
これを無効化したい場合は、別途オプションでFalseを指定すると良い。

df.to_csv('examples/out2.csv', index=False, header=False)
cat ~/examples/out2.csv

1,2,3,4,hoge
5,6,7,8,fuga
9,10,11,12,foo

出力結果をコンソールに表示する

いちいちファイルに書き出しているとファイル数もどんどん増えていくので、ここからは出力結果をコンソール上で確認していくことにする。

まずはsysをインポートする。

import sys

そしてto_csvメソッドの書き出し用ファイル名をsys.stdoutとする。

df.to_csv(sys.stdout, index=False, header=False)
# 1,2,3,4,hoge
# 5,6,7,8,fuga
# 9,10,11,12,foo

これで、to_csvメソッドを実行するとファイルを書き出さずに結果をコンソール上で直接確認できるようになった。

カンマ以外の区切り文字を使用する

別の区切り文字を使用したい場合は、sepオプションを使用する。

df.to_csv(sys.stdout, sep='|', index=False, header=False)
# 1|2|3|4|hoge
# 5|6|7|8|fuga
# 9|10|11|12|foo

一部の列のみ指定して書き出す

データベースのSELECT分の要領で、一部の列のみを抜き出し、指定した順序で出力することもできる。

df.to_csv(sys.stdout, index=False, columns=['d', 'c', 'a'])
# d,c,a
# 4,3,1
# 8,7,5
# 12,11,9

シリーズをファイルに書き出す

to_csvメソッドは、データフレームだけでなくシリーズでも使うことができる。

import pandas as pd
import numpy as np
import sys

series = pd.Series(np.arange(10))
series.to_csv(sys.stdout)