Python

Python pandas CSVの読み込み ~ファイルの指定とShift-JIS対策~

はじめに

Pythonのデータ解析ライブラリ pandasでCSVを読み込む方法と「読み込むファイルの指定方法」「Shift-JIS対策」について、わかりやすく・シンプルに解説します。

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

環境

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

Python   3.9.6
pandas4.7.2
OS            Windows10                  

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

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

最新技術に追いつけない...という方へ

Pythonやソフトウェアのトレンドについて「何を見ればいいかわからない」「早すぎて追いつけない!」という方は、今の時代でも雑誌が便利です。

最近は目にする機会が減っているかもしれませんが、正確できちんと編集された情報が「手軽」に読めるのは、今も昔も雑誌しかありません。電子化もされているので保管や廃棄に困ることもなくなりました。

Pythonも毎回特集されていて、機械学習やエディタなどの情報も一石二鳥でキャッチでます。若手の会話に「なにそれ…」となる前に、手軽に最新情報を仕入れましょう。

¥1,692 (2022/03/16 16:43時点 | Amazon調べ)

最新号以外はKindleUnlimitedに対応しています。今なら2か月分が980円です。

実行結果

以下3つのCSVファイルを読み込んだ結果です。

  • Pythonファイルと同じ場所に置かれたCSVファイル
  • Pythonファイルと別の場所に置かれたCSVファイル
  • 文字コードがShift-JISのCSVファイル

CSVファイルの内容

それぞれのCSVファイルの内容は以下の通りです。

Pythonファイルと「同じ場所」に置かれたCSVファイル

Pythonファイルと同じ場所に以下のファイルが保存されています。

Pythonファイルと同じ場所に保存したCSVファイルの内容を示す画像
data_same.csvの内容

Pythonファイルと「別の場所」に置かれたCSVファイル

Pythonファイルと別の場所に以下のファイルが保存されています。記事ではCドライブの下に作成したCsvDataというフォルダ(Pythonファイルと別の場所)に以下のファイルを置いています。

Pythonファイルと別の場所に保存したCSVファイルの内容を示す画像
data_other.csvの内容

文字コードがShift-JISのCSVファイル

Shift-JISで保存されたファイルです。上記と同じCドライブの下に作成したCsvDataというフォルダ(Pythonファイルと別の場所)に以下のファイルを置いています。

Shift-JISで保存されたファイルの内容を示す画像。
data_sjis.csvの内容

実行結果

プログラムの実行結果は以下の通りです。

# 同じ場所に置かれたCSVファイル
     name  age  color   flag
0    jiro   11   Blue   True
1  saburo   21  Green  False

# 別の場所に置かれたCSVファイル
   name  age color  flag
0  jiro   11  Blue  True
   name  age  color   flag

# Shift-JISで保存されたCSVファイル
0    太郎    1    Red   True
1   じろう   11   Blue   True
2  サブロー   21  Green  False

全体コード

全体コードは以下の通りです。詳細は後述するコードのポイントの中で解説します。

from operator import index
import pandas as pd

# --- CSVを読み込みます ---

# pythonファイルと「同じ場所」のファイル
df_same = pd.read_csv("data_same.csv")

# pythonファイルと「別の場所」のファイル
df_other = pd.read_csv("C:\CsvData\data_other.csv")

# pythonファイルと「同じ場所」の「Shift-jis」のファイル
df_sjis = pd.read_csv("C:\CsvData\data_sjis.csv", encoding="Shift-JIS")


# --- 読み取ったCSVを表示します ---

# 同じ場所のCSVファイル
print(df_same)

# 別の場所のCSVファイル
print(df_other)

# Shift-JISのCSVファイル
print(df_sjis)

コードのポイント

ファイルの読み込みと指定

CSVファイルの読み込みにはread_csv関数を使います。関数の引数に「ファイルの場所(パス)と名前」を指定することで、読み込むファイルを指定できます。

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


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

同じ場所: パスを指定しない

CSVファイルが「Pythonファイルと同じ場所(カレントディレクトリ)の場合」、以下のようにファイル名のみを指定します。

# pythonファイルと「同じ場所」のファイル
df_same = pd.read_csv("data_same.csv")

別の場所:パスの指定する

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

# pythonファイルと「別の場所」のファイル
df_other = pd.read_csv("C:\CsvData\data_other.csv")

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

読み込みエラーとShift-JIS対策

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

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

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

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

# pythonファイルと「同じ場所」の「Shift-jis」のファイル
df_sjis = pd.read_csv("C:\CsvData\data_sjis.csv", encoding="Shift-JIS")

Windows10の旧バージョン・Windows7などを使用している場合は、「TeraPad」(無料のメモ帳アプリ)がおすすめです。上記と同様に右下に文字コードが表示されます。

まとめ

Pythonのデータ解析ライブラリ pandasでCSVを読み込む方法と「読み込むファイルの指定方法」「Shift-JIS対策」について解説しました。参考になればうれしいです。

初心者にもやさしい本があります(コスパもよし)

高度で専門的な本が多いpandasですが、Python・pandas 両方の初心者に優しい本があります。

難しそうな表紙に見えますが、変数などの「Pythonの基礎」、データ構造・データ解析入門などの「pandasの基礎」二つとも綺麗に書かれていて、Amazonのレビューでも「わかりやすい」という内容が目立ちます。

2つの内容が一冊で読めてコスパも良好な本なので、「これからPython・pandasをマスターしていきたい!」という方は、是非以下の書籍で初めてみてください。

CSVから読み込んだ後は

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

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

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

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

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

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

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

COMMENT

メールアドレスが公開されることはありません。