Python

【初心者向け】Python pandas CSVの読み込み ファイル指定と、delim_whitespaceの便利な使い方

はじめに

無料で使えるPythonのデータ解析ライブラリ 「pandas」で、CSVを読み込む「read_csv関数の使い方」についてを紹介します。紹介する内容は以下の通りです。

※ クリックで各項目にジャンプできます

この記事では、CSVファイルの指定方法や、読み込み時の引数指定に特化して解説しています。読み込み後のデータの操作方法・データ形式については以下の記事をご覧ください。

環境

この記事は以下の環境で作成しています。

Python   3.9.6
pandas4.7.2
OS            Windows10                  

「Windows10 + Python + pandas + venv」の環境で作成しています。(AnacondaやJupiterNotebookは使用していません)

「環境やインストール方法が知りたい」という方は、以下の記事をご覧ください。

CSVファイルの指定方法

「read_csv関数」の引数に、CSVファイルの保存場所(パス)と、ファイル名を指定します。

read_csv( ” ファイルの場所 + ファイルの名前.csv" )


指定方法は、CSVファイルの保存先がPythonファイルと「別の場合の場合」「同じ場合の場合」で分かれます。

保存場所が別なら場所(パス)の指定が必要

CSVファイルが「Pythonファイルと別の場所に保存されている場合」、以下のように「場所+ファイル名」の形式で指定します。

# csvファイルを読み込みます
df = pd.read_csv("C:\CsvData\data.csv")

上記は「絶対パス」という、パスのトップ(Cドライブ)から指定する方法です。
Pythonファイルの保存場所から見て「ひとつ上」のような「相対パス」で指定することもできます。

保存場所が同じなら 場所(パス) の指定は不要

CSVファイルが「Pythonファイルと同じ場所(カレントディレクトリ)の場合」パスの指定は不要です。ファイル名のみを指定します。

# csvファイルを読み込みます
df = pd.read_csv("data.csv")

読み込めない場合は文字コードを確認する

CSVの読み込み時にエラー・文字化けが発生する場合は、文字コードが「Shift_JIS(ANSI)」である可能性があります。

Pythonのデフォルトの文字コードは「UTF-8」という形式です。そのため、「Shift_JIS」のファイルを読み込む場合は、read_csv関数に「encoding」という引数が必要になります。

文字コードの確認には、Windows10のメモ帳が使えます。CSVファイルを開いて右下に「ANSI」と表示されたら、開いたファイルの文字コードは「Shift-JIS」です。

メモ帳で文字コードを確認する場所を説明した画像

「encoding」に以下のようにShift_JISの設定をしてください。

# csvファイルを読み込みます
df = pd.read_csv(  "C:\CsvData\data_sjis.csv",   encoding="Shift-JIS")

Windows10のバージョンの違いや、それ以前のバージョンをご使用の場合は、「TeraPad」(無料のメモ帳アプリ)がおすすめです。上記と同様に右下に文字コードが表示されます。

区切り文字と delim_whitespace の便利な使い方

delimiter引数に「区切り文字」を指定する

「delimiter」引数に区切り文字を指定すると、「スペース区切り」「タブ区切り」のファイルも読み取ることができます。

スペース区切りのファイル
name age color flag
taro 1 Red true
saburo 21 Green false
タブ区切りのファイル
name    age color   flag
taro    1   Red     true
saburo  21  Green   false

「スペース区切り」「タブ区切り」を読み込むコード

スペース区切りなどのファイルを読み込む場合、delimiter引数に「=" "」のような形式で区切り文字を指定します。タブを指定する際は「\t」と指定してください。

import pandas as pd

# スペース区切りのファイルを読み込みます
df_delim_space = pd.read_csv("C:\CsvData\data_space.csv",delimiter=" ")

# タブ区切りのファイルを読み込みます
df_delim_tab = pd.read_csv("C:\CsvData\data_tab.csv",delimiter="\t")

# 読み取ったCSVを表示
print(df_delim_space)
print(df_delim_tab)

"""
# 実行結果
     name  age  color   flag
0    taro    1    Red   True
1    jiro   11   Blue   True
2  saburo   21  Green  False

    name    age color   flag
0   taro    1   Red     true
1   jiro    11  Blue    true
2  saburo  21  Green   false
"""

delim_whitespace の便利な使い方

スペース区切りの場合のみ、CSVに挿入されている「見やすさのためのスペース」を簡単に削除することができます。以下は極端にスペースを追加したCSVの例です。

name, age,        color,    flag
taro,       1,      Red,     true
jiro,       11,   Blue,      true
saburo,     21,    Green,     false


上のCSVは、読み込むと列名やデータにスペースがついてしまう、意外とやっかいなファイルです。pandasを使わない場合は、単語ごとに削除するような処理が必要ですが、「delim_whitespace」引数を使うと、読み込み時に自動でスペースを除外することができます。

import pandas as pd

# csvファイルを読み込みます
df_no_delim = pd.read_csv("C:\CsvData\data_space.csv")
df_delim    = pd.read_csv("C:\CsvData\data_space.csv", delim_whitespace=True)

# 読み取ったCSVを表示
print(df_no_delim)

# 読み取ったCSVを表示
print(df_delim)

"""
# 実行結果
     name   age         color        flag
0    taro     1           Red        true
1    jiro    11          Blue        true
2  saburo    21         Green       false

     name, age,  color,   flag
0    taro,   1,    Red,   True
1    jiro,  11,   Blue,   True
2  saburo,  21,  Green,  False

"""

厳密に言うと、delim_whitespace引数は、「1個~複数個の(ホワイト)スペースを区切り文字として扱う」という指定です。そのため、delimiter引数で区切りとして指定した文字列は無視されます。

「カンマ+見やすさスペース」のファイルでも、上記のようなスペースの除去が可能ですが、「見やすさのスペースのみが区切り文字として扱われる」ため、カンマは区切り文字とみなされず、読み取り後のデータに残ってしまいます。そのため、delim_whitespaceはスペース区切りのファイルで使うことをおすすめします。

まとめ

無料で使えるPythonのデータ解析ライブラリ 「pandas」のread_csv関数の使い方、読み込みエラー時の対処、delim_whitespaceの便利な使い方についてを解説しました。参考になればうれしいです。

このブログでは、CSVから読み込んだ後のデータの操作方法や、読み取り後のデータ形式(DataFrame)についても解説しています。興味がある場合は、是非以下のリンクも参考にしてみてください。

CSVファイル読み込み後に単一要素にアクセスする

読み込み後のCSVファイルの形式「DataFrame」について

応援・要望お待ちしてます

ブログを見ていて「この辺を詳しく知りたい」「このライブラリの使い方を知りたい」「こんなことで困ってる」...etc があれば、コメント・問い合わせ・Twitterで教えてください。質問・ご要望に合わせて解説記事を作ります。

ブログを気に入っていただけたり、「応援してもいいよ」という方がいたら、ブログやSNSでの紹介をお願いします。 あたたかい応援は、中の人の更新の大きな励みになります。

ABOUT ME
えす
現役のソフトウェアエンジニアです。 C++ C# Python を使ってます。10年ちょい設計/開発部門にいましたが、今はQAエンジニアっぽいことをしています。

COMMENT

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