【Python入門】CSVファイルをコード1行で読み込む方法

csv pandas

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から始まる整数を上の行から連番で設定して作成されます。

index
図1: df_potesara

主なパラメーター

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のパラメーターの使い方がわかった
タイトルとURLをコピーしました