【pandas】csvやexcelファイルをPythonで読み書きする方法を解説

こんにちは!

Pythonではデータ分析や機械学習といったことができますが、そのためにはデータを読み込む必要があります。

そのときに読み込むデータがcsvファイルであったりExcelファイルであるケースも少なくないと思います。

また、処理した結果をこれらのファイルとして出力して別のプログラムで使うといったこともあります。

そこで今回は、Pythonライブラリを使ってcsvファイルやExcelファイルを読み書きする方法を紹介します^^

今回は、「pandas」ライブラリを使ってファイルの読み書きをしていきます。

csvファイルとは?

Excelファイルは馴染みがあるけど、csvファイルと言われてもピンとこない方もいるのではないでしょうか?

csvとは、「Comma Separated Value」の頭文字を取ったものです。

文字通り、「カンマ( , )で値が区切られたファイル」ということです。

csvファイルのサンプル

csvファイルでは、Excelファイルのような表形式のデータが、カンマで区切られたテキストとして表現されます。

ちなみに上記と同じデータのExcelファイルはこんな感じです。

exxcelファイルのサンプル

csvファイルの特徴

csvファイルの特徴としては、互換性の高さが挙げられます。

また、シンプルなテキスト形式であるため、様々なソフトウェアで扱うことができることも特徴です。

csv、Excelファイルを読み込む

それでは、実際にPythonでファイルの読み込みをしていきましょう!

実は、pandasライブラリを使うと、とても簡単にファイルを読み込むことができるんです^^

csvファイルを読み込む

今回は、ボストンの住宅価格データである”load_boston.csv”というファイルを読み込んでみます。

コードは以下の通りです。

import pandas as pd
df = pd.read_csv("data/load_boston.csv")

たったこれだけなんですw

pythonでcsvファイルを読み込んだ結果

表形式のデータなので、csvファイルはDataFrameまたはSeriesとして読み込まれます

ファイルのパスは、絶対パスで指定するか、Pythonのプログラムファイルからの相対パスで表します。

ただ読み込むだけであればこれだけでいいのですが、色々カスタマイズして読み込むこともできます。

ヘッダーの有無を指定する

今回のデータには、ヘッダー(列名)がありました。

しかし場合によっては、ヘッダーがないcsvファイルもあります。

そんな時は、”header” というパラメータを追加してあげます。

df = pd.read_csv("data/load_boston.csv", header=None)
ヘッダーの有無を選べる

列名には連番が振られました。

また、もともとのヘッダー行が、1行のデータとして認識されています。

インデックスとする列を指定する

インデックスにする列を指定するには、”index_col“というパラメータに、0から始まる列番号で指定します。

これを指定していないと、インデックスがあるファイルを読み込んだ時に、左端に”Unnamed: 0″という列ができます。

そのままcsvファイルを読み込んだ場合

左から0列目をインデックスとして指定します。

df = pd.read_csv("data/load_boston.csv", index_col=0)
インデックス列を指定した場合

インデックス列として認識されました!

指定の行数だけ読み込む

データ分析をする際は、膨大なデータを扱います。

なので、ファイルサイズが非常に大きい場合もよくあります。そんなファイルを読み込むと処理が重くなってしまいます。

ファイルの中身がどんなものか知りたいといった場合には、数行だけを読み込んで確認することができます。

nrows“というパラメータを使えば、先頭から指定した行数だけを読み込むことができます。

df = pd.read_csv("data/load_boston.csv", nrows=10)
指定した行数だけ読み込んだ結果

文字コードを指定する

何も指定しない場合、”utf-8″としてファイルが読み込まれます。

ファイルの文字コードが”utf-8″以外の場合はエラーが出てしまいます。

そこで、”encoding“というパラメータを使って読み込むファイルの文字コードを指定します。

df = pd.read_csv("data/load_boston.csv", encoding="cp932")

“cp932″は、”shift_JIS”の別名と思ってください。

Excelファイルを読み込む

次は、Excelファイルを読み込んでいきましょう。”.xlsx”と”.xls”ともに読み込むことができます。

df = pd.read_excel("data/load_boston.xlsx")
Excelファイルを読み込んだ結果

基本は、たったこれだけです^^

また、csv読み込みの部分で紹介した追加のパラメータも同じように使うことができます

csv、Excelファイルとして書き出す

次は、DataFrameをcsvファイルやExcelファイルとして書き出してみましょう。

もちろん、Seriesの書き出しもできます。

csvファイルとして書き出す

まずは、シンプルにcsvファイルとして書き出してみましょう。

“to_csv”というメソッドを使います。

df.to_csv("data/load_boston.csv")
書き出したcsvファイル

基本はこれだけです。以下、お好みで使えるパラメータをいくつか紹介します。

ヘッダー、インデックスの有無

header“でヘッダーの有無を、”index“でインデックスの有無を指定できます。

値は、TrueまたはFalseです(デフォルトはTrue)

df.to_csv("data/load_boston.csv", header=False, index=False)
出力時にヘッダーやインデックスの有無を指定できる

インデックスとヘッダーがなくなりました^^

指定の列だけ書き出し

データのある列だけを出力したいときは、”columns“というパラメータに列名を与えます。

“CRIM”列と”ZN”列だけを書き出してみます。

df.to_csv("data/load_boston.csv", columns=["CRIM", "ZN"])
特定の列をcsvファイルに出力できる

文字コードを指定する

読み込み時と同じように、”encoding“で指定します。

特に、日本語データを扱う場合は、”cp932″などにしておかないと、文字化けしてしまいます。

df.to_csv("data/load_boston.csv", encoding="cp932")

Excelファイルとして書き出す

今度は、Excelファイルとして書き出してみましょう。

df.to_excel("data/load_boston.xlsx")
Excelファイルを書き出した結果

基本はこれでOKです。^^

また、”to_csv”メソッドと同じようにパラメータが使えます。

シート名を指定する

Excelファイルとして出力するときは、出力するシートの名前を指定することができます。

sheet_name“というパラメータを使います。

df.to_excel("data/load_boston.xlsx", sheet_name='new_sheet')
出力したときのシート名を指定できる

シート名が変わりました^^

Pythonでデータサイエンスするなら

Pythonでデータサイエンスをするなら、以下の書籍がおすすめです。Pandas、matplotlib、Numpy、scikit-learnといったデータサイエンスに必要なライブラリを、体系立てて一通り学ぶことができます。

ややお値段高めですが、これ1冊で十分という内容・ボリュームなので、損はしないと思います^^

初学者の方にはこちらもオススメです^^

まとめ

csvやExcelファイルの読み込み、書き出しは、プログラムとして実行する処理の入り口と出口の部分だと思います。

今回紹介した追加パラメータでの処理は、ここでやらなくてもプログラムで処理できるといった場合がほとんどかもしれません。

しかし、プログラムをより簡素に、可読性を上げるという観点から、ファイルの読み込みや書き出しの時点でできる処理をしておくということも必要だと思います。

状況に応じて使い分けられるように、色々知っておくことが大事かもしれませんね^^

ではでは👋