PythonでCSVファイルを読み込んで配列に格納する方法を現役エンジニアが解説【初心者向け】

初心者向けにPythonでCSVファイルを読み込んで配列に格納する方法について現役エンジニアが解説しています。CSVはデータがカンマなどで区切られている形式のことです。Pythonではcsvモジュールのreadeメソッドでcsvファイルを読み込むことが出来ます。

TechAcademyマガジンは受講者数No.1のオンラインプログラミングスクールTechAcademy [テックアカデミー]が運営。初心者向けに解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。

PythonでCSVファイルを読み込んで配列に格納する方法について解説します。

Pythonプログラムでデータベースや表計算ソフトのデータを扱いたいという時があると思います。

たとえば、データベース、表計算ソフトではそれぞれデータの形式が異なります。

そのような場合、データ自体をCSVファイルで出力することで、プログラムで取り扱うことが簡単になります。

最終的にPythonプログラムでCSVファイルを読み込んでデータを配列として扱うことで、実務でもデータ操作ができるようになります。

目次

 

田島悠介

今回は、Pythonに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

PythonでCSVファイルを読み込んで配列に格納する方法について詳しく説明していくね!

大石ゆかり

お願いします!

 

CSVファイルを読み込む方法

CSVファイルを読み込むには、下記の手順で行います。

  1. CSVモジュールのインポート
  2. CSVファイルを開く
  3. Readerオブジェクト
  4. Readerオブジェクトのデータをforループで取り出す

詳しく解説していきます。

 

CSVモジュールのインポート

コード

import csv

解説

import csvと実装することで、CSVモジュールをインポートしてCSVファイルを利用できる環境が整います。

 

CSVファイルを開く

コード

with open("data.csv") as f:

解説

with open("data.csv") as f:では、with open("data.csv")でdata.csvというファイル名のCSVファイルを開きます。

as f:では、開いたファイルをfというオブジェクトに置き換えて利用できるようにしています。

fはオブジェクト名なのでas csvfile:など、任意の名称で良いです。

 

Readerオブジェクト

コード

csv.reader(f)

解説

csv.reader(f)で、fというオブジェクトをCSVモジュールのreaderメソッドを利用して読み込みます。

 

Readerオブジェクトのデータをforループで取り出す

コード

for row in csv.reader(f):

解説

for row in csv.reader(f):では、for文を利用して、csv.reader(f)で読み込んだ内容を1行単位でrowというオブジェクトに代入しています。

1行を1つのrowに入れるため、rowに入れるデータがなくなった場合、for文が終了します。

 

 

[PR] Pythonで挫折しない学習方法を動画で公開中

配列に格納する方法

CSV形式のデータなので、列(カラム)ごとに個別のデータとして扱えると処理がしやすいですね。

csv.reader()とfor文を組み合わせることで、行単位でデータを配列(list)に格納できます。

 

以下のようなdata.csvを読み込んでみます。

this,is,csv

 

通常のファイルの読み込みの場合を、まずは見てみましょう。

with open("data.csv") as f:
  for line in f:
    print(f"{line}")
    print(f"{type(line)}")

with openでファイルを開いたあとに、for line in fとすることで1行ごとにデータを読み込んでいます。

 

このコードを実行すると、以下のようになります。

$ python csv_read.py
this,is,csv
<class 'str'>

ひとかたまりのの文字列(str)データとして扱われているのが分かります。

 

次に、以下のように CSVモジュールを使って読み込んでみます。

import csv
with open("data.csv") as f:
  for row in csv.reader(f):
    print(f"{row}")
    print(f"{type(row)}")

 

実行結果がこちらです。

列(カンマ)ごとのデータが配列で取得できているのが分かります。

$ python csv_read.py
['this', 'is', 'csv']
<class 'list'>

 

csv.reader()の注意点として、すべて文字列として読み込まれる点に注意しておきましょう。

 

1,2,3

上記の内容でdata.csvを用意して、同じように csv.reader()で読み込んでみます。

 

読み込まれたデータそのものの型もチェックしてみましょう。

import csv
with open("data.csv") as f:
  for row in csv.reader(f):
    print(f"Row: {row}")
    print(f"Type of row: {type(row)}")
    print(f"1st Data: {row[0]}")
    print(f"Type of 1st Data: {type(row[0])}")

 

以下の実行結果を見てみると、すべてのデータが文字列として読み込まれているのが分かりますね。

$ python csv_read.py
Row: ['1', '2', '3']
Type of row: <class 'list'>
1st Data: 1
Type of 1st Data: <class 'str'>

 

読み込んだデータを使って計算したいようなケースでは、読み込んだデータを適切にキャスト(型変換)してあげるか、quoting=csv.QUOTE_NONNUMERICオプションを付けて読み込むと良いでしょう。

import csv
with open("data.csv") as f:
  for row in csv.reader(f, quoting=csv.QUOTE_NONNUMERIC):
    print(f"Row: {row}")

$ python csv_read.py
Row: [1.0, 2.0, 3.0]

 

quoting=csv.QUOTE_NONNUMERICオプションを使用した場合、すべての列をfloat型として読み込みます。

なので、文字列として読み込みしたいデータはダブルクォーテーションで囲んでいないとエラーになります。

 

1,2,3,csv

上記内容に対して quoting=csv.QUOTE_NONNUMERICオプションで読み込みを行うと、次のようにValueErrorになります。

$ python csv_read.py
Traceback (most recent call last):
  File "csv_read.py", line 4, in <module>
    for row in csv.reader(f, quoting=csv.QUOTE_NONNUMERIC):
ValueError: could not convert string to float: 'csv'

 

ダブルクォーテーション、もしくはシングルクォーテーションで囲むことで、quoting=csv.QUOTE_NONNUMERICオプションを指定した場合でも文字列として読み込めます。

1,2,3,"csv"

$ python csv_read.py
Row: [1.0, 2.0, 3.0, 'csv']

 

実際に書いてみよう

今回は、次のページから東京都の郵便番号ファイルをダウンロードして利用してみます。

 

CSVファイルをダウンロード

ダウンロードページURL:https://www.post.japanpost.jp/zipcode/dl/kogaki-zip.html

 

CSVファイルを解凍

Windowsであれば13TOKYO.zipファイルを右クリックしてすべてを展開を選択することで、13TOKYO.CSVというファイルができます。

MacOSXの場合は13TOKYO.zipファイルをダブルクリックすると13TOKYO.CSVというファイルができます。

 

サンプルコード

import csv
with open('13TOKYO.CSV') as f:
    for row in csv.reader(f):
        print(row)

 

解説

1行目のimport csvでは、CSVを利用できるようにCSVモジュールをインポートしています。

2行目のwith open('13TOKYO.CSV') as f:では、実行ファイルと同じ階層においた13TOKYO.CSVfという名称で開きます。

3行目のfor row in csv.reader(f):では、fオブジェクトをCSVモジュールのreaderで読み込み、1行1行rowオブジェクトに代入しています。

代入するデータがなくなったらfor文の処理は終了します。

4行目のprint(row)ではrowオブジェクトに入った配列データを表示しています。

 

表示結果

 

執筆してくれたメンター

中本賢吾(なかもとけんご)
アジマッチ有限会社 代表取締役社長開発実績:PHPフレームワークによるフランチャイズ企業向け会員制SNS。Shopifyによる海外進出用大規模ネットショップ構築。Vue.jsによる金融機関向け内部アプリ。AWSやLinuxハウジングサーバでの環境構築。人工知能を利用した画像判別システム。小売チェーン店舗用スマホアプリ。Wordpressによる不動産チェーン店向け賃貸・売買仲介システム。基幹システム移管用データコンバートシステム。小学生がUnityでオリジナルAndroidアプリをGoogle Playでリリース、NHK Whyプログラミング入賞、全国Programing Festival入賞、中学生がノーコードでSNS型PWAアプリリリースなど、ボランティアプログラミング教育活動行っている。

 

大石ゆかり

内容が分かりやすくて良かったです!

田島悠介

ゆかりちゃんも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

 

Pythonを学習中の方へ

これで解説は終了です、お疲れさまでした。

  • つまずかず「効率的に」学びたい
  • 副業や転職後の「現場で使える」知識やスキルを身につけたい

プログラミングを学習していて、このように思ったことはありませんか?

テックアカデミーのPythonコースでは、第一線で活躍する「プロのエンジニア」が教えているので、効率的に実践的なスキルを完全オンラインでしっかり習得できます。

合格率10%の選考を通過した、選ばれたエンジニアの手厚いサポートを受けながら、人工知能(AI)や機械学習の基礎を完全オンラインでしっかり習得できます。

まずは一度、無料体験で学習の悩みや今後のキャリアについて話してみて、「現役エンジニアから教わること」を実感してみてください。

時間がない方、深く知ってから体験してみたい方は、今スグ見られる説明動画から先に視聴することをおすすめします!