先ほど、Irisデータセットを変数dfに格納しましたが、そこではpandas.read_csv関数を使いました。これはCSVファイル(カンマで個々のデータを区切って並べたテキストファイル)からデータセットを読み込むための関数です。ですが、世の中にはCSVファイル以外にもさまざまな種類のデータセットが存在しています。そこで、pandasでは多くの種類のデータファイルからデータセットを読み込めるようにいろいろな関数が用意されています。以下はその一例です。
ファイル形式 | 読み込みに使う関数 | 書き込みに使うメソッド |
---|---|---|
CSVファイル | pandas.read_csv関数 | pandas.DataFrame.to_csvメソッド |
Excelファイル | pandas.read_excel関数 | pandas.DataFrame.to_excelメソッド |
pandasがサポートしているファイル形式と読み書きに使う関数およびメソッド(一部) |
注意点としては読み込みに使うのは関数、書き込みに使うのはDataFrameが持つメソッドになっていることかもしれません(が、すぐに慣れるでしょう)。また、本連載では「import pandas as pd」とpandasをインポートしているので、実際に関数を呼び出すときには「pd.read_csv(……)」となる点にも留意してください。
この他にもJSONファイルやXMLファイル、HTMLファイルなどを対象にデータセットを読み書きすることも可能です。が、ここでは上で紹介した2種類のファイル形式の読み書きについて見ていくことにします。
既にコードは出てきましたが、まずはCSVファイルからデータセットを読み込むpandas.read_csv関数を紹介します。なお、以下で紹介するのは関数やメソッドの代表的なパラメーターのみとします。全てのパラメーターについては上記リンクを参照してください。
pandas.read_csv(filepath_or_buffer, sep, delimiter, header, names, index_col,
usecols, dtype, skiprows, nrows, encoding)
CSVファイルからデータセットをDataFrameオブジェクトに読み込んで、それを戻り値とする。代表的なパラメーターは以下の通り。ただし、パラメーターに設定できる値は以下の説明よりも幅広いので、詳しくは「pandas.read_csv」を参照のこと。
先ほども見ましたが、pandas.read_csv関数を使ってCSVファイルからデータセットを読み込むコードの例を以下に示します。
names=['Sepal Length', 'Sepal Width', 'Petal Length', 'Petal Width', 'class']
df = pd.read_csv('iris.data', names=names, index_col=False)
この例ではnamesパラメーターにIrisデータセットのドキュメントを基にした列ラベルを渡し、index_col=FalseとすることでCSVファイルに行ラベルがないことを指示しています(実行結果は省略します)。
CSVファイルからの読み込みについては「CSVファイルから読み込みを行うには(pandas編)」も参照してください。
CSVファイルへのDataFrameオブジェクトの書き込みにはpandas.DataFrame.to_csvメソッドを使用します。
pandas.DataFrame.to_csv(path_or_buf, sep, na_rep, columns, header, index,
index_label, encoding, quoting, quotechar)
DataFrameオブジェクトの内容をCSVファイルに書き込む。主要なパラメーターは以下の通り。ただし、パラメーターには以下の説明よりも幅広い値を設定できるので、詳しくは「pandas.DataFrame.to_csv」を参照のこと。
CSVファイルへの書き込み例を以下に示します。
df.to_csv('csv_sample.csv', header=['a', 'b', 'c', 'd', 'e'], index=False)
この例では、「header=['a', 'b', 'c', 'd', 'e']」として列ラベルの上書きを指定するとともに、「index=False」として行インデックスを書き込まないことを指定しています。実際に作成されたCSVファイルがどんなものかを確認してみましょう。
from pathlib import Path
print(Path('csv_sample.csv').read_text())
実行結果を以下に示します。
pandas.read_csv関数とpandas.DataFrame.to_csvメソッドはパラメーターが多数あるので、いろいろと試しながら、普段の自分の使い方にあった設定を探し出すようにしましょう。
Excelファイルを対象としたDataFrameオブジェクトの読み書きにはpandas.read_excel関数を使用します。
pandas.read_excel(io, sheet_name, header, names, index_col, usecols,
dtype, skiprows, nrows)
Excelファイルの内容をDataFrameオブジェクトに読み込む。主要なパラメーターは以下の通り。また、パラメーターに指定可能な値は以下の説明よりも幅広いので、詳しくは「pandas.read_excel」を参照のこと。
Excelファイルからデータセットを読み込むコードの例を以下に示します(サンプルのExcelファイルは次に説明するpandas.DataFrame.to_excelメソッドで作成しています)。
df = pd.read_excel('excel_sample.xlsx', usecols='A:E', header=0)
df
実行結果を以下に示します(このとき、openpyxlモジュールが見つからなくて例外が発生したら、「pip install openpyxl」「py -m pip install openpyxl」などのコマンドを実行してopenpyxlモジュールをインストールしてください)。
Visual Studio Codeのウィンドウ下部にはExcelファイルの内容も表示してあります。これを見ると、A列からE列にデータが存在しているので、usecolsパラメーターに'A:E'を指定することで、全ての列のデータが読み込まれているということです。また、headerパラメーターには0を指定しているので第0行の内容が列ラベルとして使われていることも確認できました(列ラベルが'a'〜'e'になっているのは、以下で説明するpandas.DataFrame.to_excelメソッドの呼び出しサンプルでそのように指定しているからです)。
余談ですが、Visual Studio Code内でのExcelファイルの表示にはExcel Viewer拡張機能を使用しています(入れておくと便利に使えるはずです)。
Excelファイルへの書き込みにはpandas.DataFrame.to_excelメソッドを使います。
pandas.DataFrame.to_excel(excel_writer, sheet_name, na_rep, columns, header,
index, index_label, startrow, startcol)
DataFrameオブジェクトの内容をExcelファイル(.xlsxファイル)に書き込む。主要なパラメーターは以下の通り(ここでは単一のDataFrameオブジェクトをExcelファイルに書き込むものとする)。また、パラメーターに指定可能な値は以下の説明よりも幅広いので、詳しくは「pandas.DataFrame.to_excel」を参照のこと。
pandas.DataFrame.to_excelメソッドを使用して、Excelファイルに書き込みを行う例を以下に示します。
df.to_excel('excel_sample.xlsx', header=['a', 'b', 'c', 'd', 'e'], index=False)
ここではheaderパラメーターに「Petal Length」のような元々の列ラベルとは異なるものを指定しています。また、indexパラメーターにはFalseを指定しているので、行ラベルは出力されないはずです。
Excelファイルの内容は既に上の画像にもありますが、もう一度掲載しておきましょう。
と、ここまでCSVファイルとExcelファイルを対象に読み書きを行う方法を紹介してきました。なぜ読み書きが最初の話題かというと、pandasを使って何かする以前にデータセットは別の方法や別の形で存在していることがよくあるからです(どこかのWebサイトからダウンロードしたり、別の手法でデータを収集して、それを基に一定の形式の表形式データセットを作成したりするなど)。
そうしたデータセットを今から使おうというときには、今紹介した関数のお世話になることでしょう。さらに、自分の作業に適した形に、それをpandasで加工して、保存しておきたくなったときには書き込み用のメソッドが必要になります。そういうわけで、ここではデータセットの読み書きについて話しました。
読み書きの方法が分かっただけでは物足りないかもしれません。最後に読み込んだデータセットを調べる方法を幾つか簡単に見ておきましょう。ここでは以下のメソッドを紹介します。
といっても、DataFrameオブジェクトを対象に引数を指定せずに呼び出すだけです(そのため、実行結果のみの掲載とします。また、変数dfには本稿冒頭で示したのと同じコードを実行して元々のデータセットから作成したDataFrameオブジェクトを代入しています)。
pandas.DataFrame.headメソッドはDataFrameオブジェクトの先頭n件(デフォルトでは5件)のデータを表示するものです。以下に呼び出し例を示します。
先頭のデータを見るだけだなんて、意味はないよ、と思う方もいらっしゃるでしょうが、これはDataFrameオブジェクトへのデータセットの読み込み後に、ちゃんと読み込めているかどうかの確認だったり、読み込み時のデータ型の指定に間違いはないかどうかの確認だったりという意味でこのメソッドを実行することもよくあります。
pandas.DataFrame.infoメソッドは、読み込んだデータセットの概要をコンパクトにまとめて表示してくれます。以下が実行例です。
「RangeIndex」からはデータ数が分かります。その次に、各列の列ラベルと欠損していないデータが何件あるか、その列に格納されているデータの型が表示されています。float64というのは、実数(浮動小数点数)のことで、objectというのは数値ではないデータであることを示しています(あやめの種類を示す「Iris-setosa」のような文字列は数値ではないのでobject型のデータとなっています)。
そして、DataFrame全体でfloat64型の列が4つ、object型の列が1つあることも分かりました。最後にメモリの使用量も表示されました。
このメソッドもデータセットを読み込んだ直後に、それがどんなものなのかを軽く確認する目的で実行することがよくあります。
最後のpandas.DataFrame.tailメソッドの実行例も見てみましょう。
このメソッドは、pandas.DataFrame.headメソッドとは逆に、DataFrameオブジェクトの最後のn件(デフォルトでは5件)を表示するものです。これは例えば、行を並べ替えるなどしたときに、自分の意図通りに並べ替えができたかどうかを確認するといった目的で使うことがあります。
ここまでpandasとは何か、DataFrameとSeries、データセットの読み書きの方法、DataFrameオブジェクトが持つ幾つかのメソッドなどを見てきました。次回はDataFrameとSeriesについてもう少し詳しく見ていく予定です。
Copyright© Digital Advantage Corp. All Rights Reserved.