てつまぐとは?

【python】【No8】pandasでCSVファイルの読み込みと書み込み

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

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

本記事の内容
  • pandasについて
  • CSVの読み込みと書み込み
  • データの読み込みでも便利なpandasというライブラリを使っていきます。

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

    pandas

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

    以下のようなことができます。

    できること

    データの読み込み書き込み

    データ同士の結合

    データの欠損値補完などの加工

    インストール

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

    pip install pandas

     

    DataFrameについて

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

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

    3つの構成

    1. columns(列名)
    2. index(行名)
    3. values(値)

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

    ライブラリの読み込み

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

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

    import pandas as pd

     

    CSV読み込み

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

    sample

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

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

    読み込み

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

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

    df = pd.read_csv('sample.csv')
    UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8e in position 0: invalid start byte

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

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

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

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

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

    df = pd.read_csv('sample.csv', encoding='cp932')

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

    データ数確認

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

    shapeを使います。

    df.shape
    (4, 3)

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

    データ確認

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

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

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

    df.head()

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

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

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

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

    色々な読み込み

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

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

    列名のないデータ

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

    sample2

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

    df = pd.read_csv('sample2.csv', encoding='cp932', header=None)
    df.head()

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

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

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

    df = pd.read_csv('sample2.csv', encoding='cp932', header=None, names=['社員名','社員コード','年齢'])
    df.head()

     

    開始位置がずれているデータ

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

    sample3

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

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

    df = pd.read_csv('sample3.csv', encoding='cp932', header=3)
    df.head()

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

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

    df = pd.read_csv('sample3.csv', encoding='cp932', header=2, names=['社員名','社員コード','年齢'])
    df.head()

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

    読み込み列の指定

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

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

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

    df = pd.read_csv('sample.csv', encoding='cp932', usecols=['社員名', '年齢'])
    df.head()

     

     

    CSV書き込み

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

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

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

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

    df = pd.read_csv('sample.csv', encoding='cp932')

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

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

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

    df.to_csv('output.csv', encoding='cp932', header=True, index=False)

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

    列名を指定して書き込む

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

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

    df.to_csv('output.csv', encoding='cp932', header=True, index=False, columns=['社員名', '年齢'])

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

     

    まだ、エクセルの読み込み書き込みや、pandas(DataFrame)の詳細な使い方が紹介できていませんが、別の記事で紹介していきます。

    コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です