CSVファイルを読み込む方法です。
Pythonでデータ分析や機械学習をするときに、CSVファイルからデータを読み込むことがよくありますが、1行のコードで記述することができます。
pandasライブラリを利用します。
CSVファイルを読み込む方法(read_csv)
import pandas as pd
df_potesara = pd.read_csv('/Users/user/Desktop/potesara.csv')
1行目: pandasが使えるようにする(ライブラリの読み込み)。
2行目: df_potesaraに、デスクトップに保存されたファイルpotesara.csvを読み込む
これでCSVファイルをコード1行で読み込むことができます。
実習: CSVファイルを読み込む
実際に、pandasでCSVファイルを読み込んでみましょう。
下記のサンプルファイルを使用します。
import pandas as pd
df_potesara = pd.read_csv('/Users/user/Desktop/potesara.csv')
df_potesara
材料 数量
0 男爵いも 2個
1 玉ねぎ 1/4個
2 にんじん 1/4本
3 リンゴ 1/4個
4 干しぶどう 40g
potesara.csvを、pandasのDataFrameとしてdf_potesaraに読み込みました。
簡単ですね。
poterasa.csvはメモ帳などで見てみると、 カンマで区切られた2行6列の文字列です。
pandasのDataFrameは、インデックスに使用する列を指定しないと、デフォルトで0から始まる整数を上の行から連番で設定して作成されます。
主なパラメーター
read_csvは、パラメーターを設定することができます。
パラメーターは初期値設定(デフォルト)がされているものは省略できます。
filepath_or_buffer | ファイルのパス | ‘/Users/user/Desktop/potesara.csv’ |
sep | 使用する区切り文字 | デフォルト: ‘,’ |
header | 列名として使用する行番号 | デフォルト: header=0 0はデータの最初の行を示す headerがないとき: None |
index_col | 行ラベルとして使用する列 | デフォルト: None |
skiprows | ファイルの先頭でスキップする行番号(i) またはスキップする行数(ii) | オプション (i) skiprows=1 (ii) skiprows=[2,4] |
engine | 使用するパーサーエンジン | オプション ‘ c’または’python’ |
encoding | 読み取り時にUTFに使用するエンコード | オプション ‘ utf-8’または’ cp932 ‘ |
実習で使用したコードでは、省略されていたパラメーターを明示します。
pd.read_csv( filepath_or_buffer='/Users/user/Desktop/potesara.csv', sep=',', header=0, index_col=None )
パラメータの値を変更することで、柔軟にCSVファイルを読み込むことができます。
判読しやすいように改行をいれていますが、1行で記述してもよいです。
filepath_or_buffer
ファイルの保存場所と、ファイル名を指定します。
ファイルの保存場所までの道筋「パス」は、2つの書き方があります。
・絶対パス
・相対パス
状況に応じて使い分けますが、実習で使用したコードは「絶対パス」で記述しています。
Windows環境での例になりますが、「C:\Users\user\Desktop」を意味します。
ログインしたユーザー名のデスクトップに保存されたファイルです。
ファイルの保存場所がPythonが実行されている作業ディレクトリのときは、ファイルの保存場所を省略して、ファイル名だけを指定することもできます。
sep
CSVファイルがカンマ(,)で区切られているときは省略すればよいです。
パイプライン(|)「キーボード右上、BSの左」あたりの記号など、カンマ以外の記号で区切られたデータで使用します。
header
CSVファイルの1行目に列名(カラム名)があるときは省略します。
実習で使用したコードで、header=1とすれば、2行目の「男爵いも」「2個」が列名となります。
headerは0から始まり、行数は1から始まるので、混乱しますね。
データベースから出力されたCSVファイルなどでは、列名がなく、データのみが出力されていることがあります。
header=Noneを指定すると、 デフォルトで0から始まる整数が左の列から連番で設定されます。
index_col
あらかじめ重複したデータのない列があれば、 行ラベルとして指定します。
実習で使用したコードで、index_col=0とすれば、列名「材料」がインデックスとして使用できます。
skiprows
統計データなどでは、CSVファイルの1行目は調査年度、2行目以降が統計データとなっているものがあります。
1行目を読み込むとエラーになってしまいますので、
・CSVファイルから1行目を削除する
・2行目以降を読み込む
と対処することになりますが、ルーチン業務では2行目以降を読み込む方が無難です。
実習で使用したコードで、skiprows=1とすれば、列名が「男爵いも」「2個」となります。
skiprows=[2, 4]とすれば、指定した行をスキップして読み込みます。
engine
ファイルの保存場所を記述するときに、フォルダ名に日本語を使用していると、
pd.read_csv( filepath_or_buffer='/Users/user/Desktop/男爵/potesara.csv', sep=',', header=0, index_col=None )
UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0x92 in position 20: invalid start byte
のように、フォルダ名に使えない文字があるよ。
とエラーが返ってきます。
とはいえ、半角英数のフォルダ名に変更するのは大変なので、engine=’python’を設定すると、無事にpandasに読み込んでくれます。
encoding
コンピュータで文字を扱う方式(文字コード)は言語やメーカーなどにより複数あります。
代表的な文字コードは
・UTF-8 多言語に対応(日本語も使える)
・CP932 日本語の拡張文字に対応(例:はしご高)
UTF-8が主流だと思っていますが、WindowsではCP932(ANSI)も使われています。
CSVファイルは、どの方式でも保存できますが、どの方式で保存されたファイルなのかは記録されていません。
CP932で保存されたファイルを読み込もうとするとエラーが返ります。
(Windowsのメモ帳でpotesara.csvを開くと、右下に「UTF-8」と表示されますが、 文字コードを「ANSI」にして名前を付けて保存すると、 「ANSI」になります。)
pd.read_csv( filepath_or_buffer='/Users/user/Desktop/potesara.csv', sep=',', header=0, index_col=None, encoding='cp932')
encoding=’cp932’と文字コードを指定すると、読み込むことができます。
まとめ
- pandasを利用して、CSVファイルを読み込むことができた
- read_csvのパラメーターの使い方がわかった