2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Python】CSVファイルの読み込みについて【備忘録】

Posted at

CSVファイルに保存されたデータを読み込む方法を備忘録としてまとめる.
使用言語はPython.

本記事中で例示するために使用したコードとデータは,ここからダウンロード可能.

方法1:pandasの使用

個人的に一番使っている方法.
pandasのread_csv関数を使用.
CSVに保存されているデータをデータフレーム(表形式)で読み込むことが可能.
引数filepath_or_bufferにCSVファイルのパス(本記事では変数path)を渡す.

インストール方法

terminal
pip install pandas

実際の使用例

pandas_test.py
import pandas as pd
path = "test.csv"
data = pd.read_csv(path)

print(data)
#     A   B   C   D
# 0   0   1   2   3
# 1  10  11  12  13
# 2  20  21  22  23
# 3  30  31  32  33

個人的によく使う引数

header

カラム(列)名として使用する行を定義する.
0Noneとすることが多い.

0:CSVファイルの第1行をカラム名とする(デフォルト)
None:カラム名をCSVファイルから取得しない
このとき,もっとも左の列から順に0列,1列,2列…となる.
基本的に,データラベルの付いていない状態でデータが保存されているときに使う.

pandas_test.py
data2 = pd.read_csv(path,header=0)
print(data2)
#     A   B   C   D
# 0   0   1   2   3
# 1  10  11  12  13
# 2  20  21  22  23
# 3  30  31  32  33

data3 = pd.read_csv(path, header=None)
print(data3)
#     0   1   2   3
# 0   A   B   C   D
# 1   0   1   2   3
# 2  10  11  12  13
# 3  20  21  22  23
# 4  30  31  32  33

names

カラム名をCSVファイルの外部から定義する.
引数にはリストやタプルを渡す.
header=Noneと併用することが多い.

pandas_test.py
data4 = pd.read_csv(path, header=None, names=('a', 'b', 'c', 'd'))
print(data4)
#     a   b   c   d
# 0   A   B   C   D
# 1   0   1   2   3
# 2  10  11  12  13
# 3  20  21  22  23
# 4  30  31  32  33

index_col

インデックス名として使用する列を定義する(引数を定義しなければ0からの連番が要素の1行目からつけられる)
0:1番左の列をindexとして使用

pandas_test.py
data5 = pd.read_csv(path, index_col=0)
print(data5)
#      B   C   D
# A    
# 0    1   2   3
# 10  11  12  13
# 20  21  22  23
# 30  31  32  33

usecols

指定した列のみを読み込む
引数にはリストを渡す

pandas_test.py
data6 = pd.read_csv(path, usecols=[0, 2])
print(data6)
#     A   C
# 0   0   2
# 1  10  12
# 2  20  22
# 3  30  32

data6_2 = pd.read_csv(path, usecols=[1])
print(data6_2)
#     B
# 0   1
# 1  11
# 2  21
# 3  31

特定の1列だけを読み込む場合でもリストを渡す必要があるため注意.

方法2:numpyの使用

numpyloadtxt関数を使用する.
CSVに保存されているデータをndarray(配列形式)で読み込むことが可能.
引数fnameにCSVファイルのパス(本記事では変数path)を渡す.

インストール方法

terminal
pip install numpy

実際の使用例

numpy_test.py
import numpy as np
path = "test2.csv"
data = np.loadtxt(path, delimiter=',')

print(data)
#[[ 0.  1.  2.  3.]
# [10. 11. 12. 13.]
# [20. 21. 22. 23.]
# [30. 31. 32. 33.]]

個人的によく使う引数

delimiter

CSVを読み込むときは','で指定しないと読み込めない.(デフォルトは' '(スペース))

numpy_test.py
data2 = np.loadtxt(path)

print(data)
# ValueError: could not convert string '00,01,02,03' to float64 at row 0, column 1.

delimiterを指定しないと,float型で読み込めないため,上のようなエラーが発生するため要注意.

方法3:CSVモジュールの使用

個人的にはpandasの方が使い勝手が良いため,ほぼ出番はない.
しかしデータの性質上,(欠損以外の要因で)行ごとの要素数が変動してしまうような場合には,上記の2点では正確に読み込めない場合があるため,CSVモジュールを使うほかない.

csv_test.py
import csv

path = "test.csv"
with open(path) as f:
	data = f.read()

read関数を使うとデータを文字列として読み込むことが可能.
後々の処理において,ndarrayやリストの方が都合が良い場合は以下のコードでリスト化する.
reader関数による返り値をそのまま使うことはできないので要注意.

csv_test.py
data2 = []
with open(path) as f:
	rows = csv.reader(f)
	print(rows)
	#<_csv.reader object at 0x0000017463001B40>
	for row in rows:
		data2.append(row)

print(data2)
#[['A', 'B', 'C', 'D'], ['00', '01', '02', '03'], ['10', '11', '12', '13'], ['20', '21', '22', '23'], ['30', '31', '32', '33']]

このコードでは,変数data2にCSVに記述されたデータをリスト型で格納できたことになる.

ちなみに,各要素は文字列で読み込まれるため,整数値や小数値で読み込みたい場合にはもう一工夫必要である.
全ての要素を整数で読み込む際の例を以下に示す.

csv_test.py
path = "test2.csv"
data3 = []
with open(path) as f:
	rows = csv.reader(f)
	for row in rows:
		data3.append([])
		for i in range(len(row)):
			data3[-1].append(int(row[i]))

print(data3)
#[[0, 1, 2, 3], [10, 11, 12, 13], [20, 21, 22, 23], [30, 31, 32, 33]]
2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?