PandasのDataFrameをCSVに書き出すto_csv関数をマスターしよう!

こんにちは!インストラクターのフクロウです!Pandasでデータをエイヤッといろいろ操作した後に、データを保存しておきたい時があります。

そんなときには、データフレームをCSVファイルに保存できるto_csvメソッドがおすすめです!データ解析・機械学習、やって終わりじゃもったいない!

この記事でto_csvをマスターして、Pythonプログラムで作ったデータをファイルとして保存するという作業をあなたの機械学習ライフに追加してみましょう!

目次

開発環境

この記事を書くために使った開発環境は以下のとおりです。

ライブラリのバージョンなど

  • OS=”Ubuntu 18.04.1 LTS”
  • Python 3.7.0
  • Pandas 0.23.4

OSが異なっても基本的には同じ操作で記事中のプログラムは再現できるので、試してみてください!

to_csvのAPI

to_csvはDataFrameのメソッドです。引数や返り値の詳しい解説は以下のページを参照してください。

上のページは公式ドキュメントですが、引数がたくさんあって混乱しちゃうかもしれません。次の章で特に大切な部分の使い方を紹介していきます!

また、この関数はCSVに書き出す機能ですが、逆にCSVから読み込む関数もあります。これについては以下の記事解説していますよ!

to_csvの使い方

[前準備]DataFrameの作成

まずライブラリをimportします。

In [1]:

import pandas as pd
import numpy as np
from sklearn import datasets

機械学習ライブラリsklearnから、iris datasetsを読み込んでDataFrameを作ります。

In [2]:
# sklearnからデータセットを読み込みます
iris = datasets.load_iris()

# データセットからDataFrameを作成します。ここでは列が特徴になっていて、クラスをlabel列として追加しておきます。
df = pd.DataFrame(iris.data, columns=iris.feature_names)
df["lable"] = [iris.target_names[i] for i in iris.target]
df.head()
Out[2]:
sepal length (cm) sepal width (cm) petal length (cm) petal width (cm) lable
0 5.1 3.5 1.4 0.2 setosa
1 4.9 3.0 1.4 0.2 setosa
2 4.7 3.2 1.3 0.2 setosa
3 4.6 3.1 1.5 0.2 setosa
4 5.0 3.6 1.4 0.2 setosa
ここまでで準備完了です。

CSVファイルにDataFrameを書き出す

まずは最低限の使い方。to_csvメソッドに作りたいCSVファイルの名前を渡すだけで、CSVファイルが作れます。ちなみに、区切り文字がカンマ「,」になっているのがCSVファイルです。

In [3]:
df.to_csv("./iris1.csv")

保存したファイルは以下のような形になっています。

区切り文字を変える

カンマ以外の区切り文字が使いたい場合を考えてみましょう。例えばTABを使いたい場合(TSVファイルと呼びます)などは、to_csvのsep引数を使います。

In [4]:
df.to_csv("./iris2.tsv", sep="t") # tはTABを表す特殊な記号です。

保存したファイルを見てみましょう。

タブを区切り文字に使ったことで、見やすくなりましたね。
タブ以外にも好きな区切り文字が使えますよ!

ヘッダーやインデックスの扱い

DataFrameには行のインデックスや、列の名前などを扱えます。これらをCSVファイルに保存するときにどう扱うかはheader引数やindex引数で決められます。

デフォルトではどちらもCSVファイルに書き込むことになっていますが、これらの情報を削除する方法を見てみましょう。

In [5]:
df.to_csv("./iris3.csv", 
          header=False, # ヘッダー情報を削除
          index=False   # 行インデックスを削除
         )

まとめ

この記事ではPandasのDataFrameをCSVファイルに保存する方法を解説しました。CSVファイルへの保存の要点は、

  • df.to_csvメソッドを使う
  • sep引数で区切り文字を変えられる
  • header/index引数のTrue/Falseで行や列の名前を保存するかどうか操作できる


です。簡単なのでどんどん使ってみてくださいね!

この記事を書いた人

第一言語はPythonです。
皆さんRustやりましょう。

目次