こんにちは!
Pythonではデータ分析や機械学習といったことができますが、そのためにはデータを読み込む必要があります。
そのときに読み込むデータがcsvファイルであったりExcelファイルであるケースも少なくないと思います。
また、処理した結果をこれらのファイルとして出力して別のプログラムで使うといったこともあります。
そこで今回は、Pythonライブラリを使ってcsvファイルやExcelファイルを読み書きする方法を紹介します^^
今回は、「pandas」ライブラリを使ってファイルの読み書きをしていきます。
csvファイルとは?
Excelファイルは馴染みがあるけど、csvファイルと言われてもピンとこない方もいるのではないでしょうか?
csvとは、「Comma Separated Value」の頭文字を取ったものです。
文字通り、「カンマ( , )で値が区切られたファイル」ということです。
csvファイルでは、Excelファイルのような表形式のデータが、カンマで区切られたテキストとして表現されます。
ちなみに上記と同じデータのExcelファイルはこんな感じです。
csvファイルの特徴
csvファイルの特徴としては、互換性の高さが挙げられます。
また、シンプルなテキスト形式であるため、様々なソフトウェアで扱うことができることも特徴です。
csv、Excelファイルを読み込む
それでは、実際にPythonでファイルの読み込みをしていきましょう!
実は、pandasライブラリを使うと、とても簡単にファイルを読み込むことができるんです^^
csvファイルを読み込む
今回は、ボストンの住宅価格データである”load_boston.csv”というファイルを読み込んでみます。
コードは以下の通りです。
import pandas as pd
df = pd.read_csv("data/load_boston.csv")
たったこれだけなんですw
表形式のデータなので、csvファイルはDataFrameまたはSeriesとして読み込まれます。
ファイルのパスは、絶対パスで指定するか、Pythonのプログラムファイルからの相対パスで表します。
ただ読み込むだけであればこれだけでいいのですが、色々カスタマイズして読み込むこともできます。
ヘッダーの有無を指定する
今回のデータには、ヘッダー(列名)がありました。
しかし場合によっては、ヘッダーがないcsvファイルもあります。
そんな時は、”header” というパラメータを追加してあげます。
df = pd.read_csv("data/load_boston.csv", header=None)
列名には連番が振られました。
また、もともとのヘッダー行が、1行のデータとして認識されています。
インデックスとする列を指定する
インデックスにする列を指定するには、”index_col“というパラメータに、0から始まる列番号で指定します。
これを指定していないと、インデックスがあるファイルを読み込んだ時に、左端に”Unnamed: 0″という列ができます。
左から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")
基本は、たったこれだけです^^
また、csv読み込みの部分で紹介した追加のパラメータも同じように使うことができます。
csv、Excelファイルとして書き出す
次は、DataFrameをcsvファイルやExcelファイルとして書き出してみましょう。
もちろん、Seriesの書き出しもできます。
csvファイルとして書き出す
まずは、シンプルにcsvファイルとして書き出してみましょう。
“to_csv”というメソッドを使います。
df.to_csv("data/load_boston.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"])
文字コードを指定する
読み込み時と同じように、”encoding“で指定します。
特に、日本語データを扱う場合は、”cp932″などにしておかないと、文字化けしてしまいます。
df.to_csv("data/load_boston.csv", encoding="cp932")
Excelファイルとして書き出す
今度は、Excelファイルとして書き出してみましょう。
df.to_excel("data/load_boston.xlsx")
基本はこれで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ファイルの読み込み、書き出しは、プログラムとして実行する処理の入り口と出口の部分だと思います。
今回紹介した追加パラメータでの処理は、ここでやらなくてもプログラムで処理できるといった場合がほとんどかもしれません。
しかし、プログラムをより簡素に、可読性を上げるという観点から、ファイルの読み込みや書き出しの時点でできる処理をしておくということも必要だと思います。
状況に応じて使い分けられるように、色々知っておくことが大事かもしれませんね^^
ではでは👋