Pandas入門

#3 Pandas入門 | PandasでCSVやExcelを読み込む方法

pandas-read-csv-excel

こんにちは、はやたす(@hayatasuuu )です。

前回の記事では、PandasのコアであるDataFrameの特徴と作成方法を紹介しました。

»前回の記事 : #2 Pandas入門 | Pandasのコア : DataFrameの特徴と作成方法を徹底解説!

 

その際に、DataFrameは一から作成するより、CSVやExcelから読み込む機会が多いとお伝えしていました。

そこで今回の記事では、Pandasを使ったCSV・Excelの読み込み方法を紹介していきます。

CSVやExcelの読み込みは、必ずと言っていいほど毎回の分析で使いますので、しっかりおさえていきましょう。

 

事前準備

PandasでExcelを読み込む場合、以下のライブラリが必要になります。

# $マークは不要です!
$ pip install xlrd

 

まだ入れていない場合には、先にインストールを済ませましょう!

 

PandasでCSVやExcelを読み込む方法

 

この記事では、以下のようなCSV/Excelファイルを読み込んでいきたいと思います。

pandas-read-csv-excel1

 

学内で実施した国数英のテスト結果が格納されているイメージです。学年にはA〜Eまでの5クラスあって、idが各個人の番号ということになります。

この記事で使っていくフォルダ構成は、以下のとおりです。

pandas-read-csv-excel2

 

read_datamart.ipynbでdataフォルダに入っているCSV/Excelを読み込むコードを書いていきます。

score_sheet_non_header.csv/xlsxは、1行だけデータがズレているCSV/Excelファイルです。

pandas-read-csv-excel1-header

 

上画像のように、1行だけ下にズレた状態になっています。CSVやExcelファイルだと、このようになっているケースもあるので、今回追加で準備しました。

パターン① : 純粋にCSVやExcelを読み込む

 

まずはシンプルにCSVやExcelを読み込む方法です。

例えばCSVファイルを読み込むなら、pd.read_csv()でカッコの中身にファイルパスdata/score_sheet.csvを書きます。

csv_df = pd.read_csv('data/score_sheet.csv')
excel_df = pd.read_excel('data/score_sheet.xlsx')

 

これだけでCSVファイルを読み込めます。Excelを読み込むときは、pd.read_excel()に変更するだけです。

このようにpd.read_**()を使うと、Pandas DataFrameの形に読み込んでくれます。

pd.read_csv()などで読み込んだ結果は、dfという名前をつけることが多いです!

 

それでは、読み込んだ結果を確認しましょう。

あとのレクチャーで詳しく紹介しますが、df.head()で読み込んだデータの先頭5行を確認できます。

pandas-read-csv-excel3

HorizontalDisplay()は、こちらの記事で紹介されているクラスです。クラス名のとおりで、DataFrameを横並び・水平に表示できます!

 

両方とも問題なく読み込めて、結果も一致していますね。

パターン② : ヘッダーを指定してCSVやExcelを読み込む

 

データによっては、下画像のようにヘッダーがズレていることがあります。

pandas-read-csv-excel1-header

 

このような場合に、先ほどと同じくpd.read_**()を使ってしまうと、同じくズレた状態でデータの読み込みをおこなってしまいます。

pandas-read-csv-excel4-header

 

先頭の行は明らかに要らなくて、1つ下からデータの読み込みをしたい。

このようなときは、以下のように、pd.read_**()の引数でheader=1と書いてあげます。

csv_df2 = pd.read_csv('data/score_sheet_non_header.csv', header=1)
excel_df2 = pd.read_excel('data/score_sheet_non_header.xlsx', header=1)

 

読み込んだ結果が、以下のとおりです。

pandas-read-csv-excel4

 

引数headerは、デフォルトで0になっています。Pythonのリストと同じように行番号の管理をしているので「0番目=1行目」です。

header=1にしてあげることで「1番目=2行目」から読み込んでいるというわけですね。

パターン③ : 型を指定してExcelやCSVを読み込む

 

ここまで2パターンのファイル読み込み方法を紹介しました。

  • パターン① : 純粋にCSVやExcelを読み込む
  • パターン② : ヘッダーを指定してCSVやExcelを読み込む

 

でも、これらの読み込み方法には少し問題点がありました。それは何かと言うと、idの読み込みでゼロ落ちしている点です。

元のCSV/Excelファイルを見てみると、idのカラムには00001のように、先頭がゼロ埋めされています。

pandas-read-csv-excel1

 

これがpd.read_**()を使ってファイル読み込みすることで、ゼロ落ちしていたわけです。

pandas-read-csv-excel3
なぜこのような結果になるのかというと、それはPandas側で自動的にidカラムをint型に変換してくれていたからです。

言い方を悪くすると、余計なことをしてくれたわけですね(笑)

 

基本的に、IDなどのユニークで振られたものは、ゼロ埋めされた状態で読み込むのが鉄則です。

そのためには、pd.read_**()の引数dtypeで、型を指定する必要があります。具体的には、Pythonの辞書型で{'id': object}を指定します。

csv_df3 = pd.read_csv('data/score_sheet.csv', dtype={'id': object})
excel_df3 = pd.read_excel('data/score_sheet.xlsx', dtype={'id': object})

 

ここで書いたobjectは、いったん「数値型以外」だと認識しておけば大丈夫です。

 

それでは、ファイルの読み込みをおこなっていきましょう。

pandas-read-csv-excel5

 

そうすると上画像のように、ゼロ埋めがキープされた形でデータを読み込めました。

後の講義で紹介しますが、df.dtypesで各カラムの型を確認できます。出力結果が以下になっていて、idカラムがobject型になっていますね。

pandas-read-csv-excel6

また、ファイル全体を文字型で読み込みたいときは、Pythonの辞書型で指定しても良いですが、dtype=objectと書けばOKです。

csv_df3 = pd.read_csv('data/score_sheet.csv', dtype=object)
excel_df3 = pd.read_excel('data/score_sheet.xlsx', dtype=object)

 

df.dtypesで確認してみると、すべてのカラムがobject型になっていますね。

pandas-read-csv-excel7

以上が、よく使うCSV/Excelファイルの読み込み方法でした。

補足 : その他の引数について

 

この記事ではpd.read_**()の引数でheaderdtypeを紹介しました。

今回紹介した2つほど使用頻度は高くないですが、次いで使う機会の多い引数が3つほどあります。

  • usecols : 読み込むカラムをインデックス番号で設定できます
  • nrows : 読み込む行数を設定できます
  • encoding : 文字コードを設定できます

 

特に引数encodingは、他より使用頻度が高いです。

pd.read_csv()pd.read_excel()でファイルを読み込むとき、デフォルトの文字コードはUTF-8になっています。

なので、読み込みたいファイルがUTF-8でなければ、対応する文字コードを引数encodingに渡してあげます。

例えば文字コードがShift-JISであれば、encoding='shift-jis'と設定するだけです!

 

まとめ : PandasでCSVやExcelを読み込む方法

 

というわけで、今回はPandasでCSVやExcelを読み込む方法を紹介してきました。

この記事で書いた内容をおさえておけば、データの読み込みで苦戦することはなくなるはずです。

 

次回は、DataFrameの中身を確認する6つの文法を紹介していきます。

基礎だけどよく使うものを紹介するので、しっかり習得していきましょう!