【pandas】csvファイルを読み込む/書き込む【Python】

pythonでは機械学習やデータ解析をすることが多いため、CSVの読み込みなどの操作は必須となります。

データ読み込めなければ、解析もできないのでとても大事です。

データの読み込みでも便利なpandasというライブラリを使っていきます。

pandasは他にもデータベースからもデータが取得できますので、pythonでは必須ライブラリの1つです。

pandasについて

pandasは表データの取り扱いに特化したライブラリです。

もともと、金融データを分析するために開発されたツールで、具体的には以下のようなことができます。

pandasを使ってできること
  1. データの読み込み書き込み
  2. データ同士の結合
  3. データの欠損値補完などの加工

pipを使ってインストール

他のライブラリと同じくpipを使ってインストールします

pandasではdataframeという型を使う

pandasではdataframeという型を使います。

DataFrameは以下の3つの構成となっています。

dataframeの3つの構成
  1. columns(列名)
  2. index(行名)
  3. values(値)

pandasではこのようなデータベースや、エクセルなどの表データを取り扱うのが得意なライブラリです。

pandasライブラリをpdとして読み込む

pandasを使うときは下記を実行します。

pandasをpdとして読み込みます。

csvファイルの読み込み

下記のCSV(sample.csv)を読み込んでいきます。

sample

上記リンクのファイルをコードと同じ場所に保存してください。

右クリックで保存できます。

read_csvメソッドで読み込む

読み込みにはread_csvメソッドを使います。

一番シンプルな使い方は、df = pd.read_csv(‘ファイルのパス’)です。

しかし、エラーが出てしまいます。

英語のみのファイルであれば良いですが、日本語を含む場合は、文字コードを気にする必要があります。

pythonのドキュメントの標準エンコーディングがそのリストになります。

今回は日本語対応の「cp932」を使います。

引数に、encoding=’cp932′を追加します。

エラーもなく読み込めました。

shapeメソッドでデータ数を確認

読み込んだデータ数を確認しましょう。

shapeを使います。

(行数, 列数)で表示されます。

データを確認するメソッド

データ確認するメソッドがいくつかあります。

メソッド 機能
head データの先頭を確認。引数に確認したいデータ数を入力、省略時は5つ表示。
tail データの末尾を確認。引数に確認したいデータ数を入力、省略時は5つ表示。
info 列名や型を確認
describe 統計値を確認

headを確認してみましょう。

4行しかないので、4行がそのまま表示されます。

赤枠の箇所が、DataFrameのIndex(行名)になります。

CSVには無いIndexが自動で追加されていますが、そういうものなので気にしないでおきましょう。

他のメソッドは各自で動かしてみてください。

データが欠損している場合の読み込み

列名とデータがある、よく見るデータを読み込みましたが、列名がなかったり、データの開始位置がズレていたりする場合があります。

次のようなデータの読み込みを見ていきましょう。

列名のないデータを読み込むには引数をheader=Noneとする

下記のような列名のないデータは、header=Noneとすることで読み込むことができます。

sample2

上記リンクをダウンロードして、実行してください。

headerは列名の開始位置になるのですが、Noneとすることで「ないよ」ということです。

列名がない場合は、0,1,2と自動で割り当てられます。

列名は引数にnames=列名のlistを渡すことで列名をつけることができます。

開始位置がずれているデータは引数にheader=列名の開始行数を指定

下記のように、行数をずらして読み込みたい場合は、引数にheader=列名の開始行数を指定します。

sample3

上記リンクをダウンロードして実行してください。

行数は0からカウントするので、今回であれば、header=3とします。

読み込めましたが、データの1行目が列名になってしまっています。

4行目に列名があればOKでしたが、今回のデータはないので、一つ上の行を選びつつ、列名を渡します。

これで列名を含んだデータを取得できました。

読み込み列の指定したい場合は引数にusecolsを使って指定する

列が多い場合、読み込みたい列だけを読み込むこともできます。

usecolsの引数を使っていきます。csvはsampleを読んでいきます。

usecols=列名リストを与えることで、指定した列だけを取得できます。

CSVの書き込み

書き込みも読み込みと同様に、文字コード、header、indexの有無を引数に渡しながら、書き込みます。

to_csvメソッドで書き込む

書き込みにはto_csvメソッドを使います。

ファイルパスでファイル名のみを指定すると、コードと同じフォルダに保存されます。

先程、列名を指定して読み込んだので、書き込む前にsample.csvを読み込んでおきます。

引数は読み込みと同じで、よく使うのは下記3つです。

引数 機能 初期値(省略時)
encoding 文字コードを指定 utf-8
header 列名を書き込むかどうか True
省略時は列名がつく
index 行名を書き込むかどうか True
省略時は行名がつく

日本語を含むので、ecoding=’cp932’で列名あり、行名なしで書き込みます。

コードと同じフォルダにoutput.csvが出力されます。

columns=対象の列名リストを引数に指定して書き込む

データ処理などを色々していると、余計な列ができていくため、必要な列のみを保存したい場合があります。

その場合は、columns=対象の列名リストを引数に渡します。

列が絞られて、保存されます。

まとめ

pythonでは機械学習やデータ解析をすることが多いため、CSVの読み込みなどの操作は必須となります。

pandasを使用した表データの取り扱いに慣れていきましょう。