pandasを使ったデータの読み書きには、テキストファイルをディスク上から読み込む方法、データベース、APIからデータを取得する方法など、様々なパターンがあげられる。
今回はテーブル形式のテキストファイルを、pandasのデータフレームとして読み込む方法を紹介する。
コンテンツ
サンプルCSVファイルの用意
まずはサンプル用のファイルを用意しよう。
ターミナルで以下のとおりファイルを用意する。
cd ~
mkdir examples
vim examples/ex1.csv
# 下記内容のファイルを作成する
a,b,c,d,message
1,2,3,4,hoge
5,6,7,8,fuga
9,10,11,12,foo
ファイルの読み込み
ファイルを作成したら、Jupyter Notebookで以下のコードを実行する。
ファイルの読み込みはread_csv関数を使用する。
import pandas as pd
df = pd.read_csv('examples/ex1.csv')
# a b c d message
# 0 1 2 3 4 hoge
# 1 5 6 7 8 fuga
# 2 9 10 11 12 foo
なお、read_table関数でもファイルを読み込むことはできるが、区切り文字をsepオプションで指定する必要がある。
df = pd.read_table('examples/ex1.csv', sep=',')
headerオプション
ファイルにヘッダー行が含まれないケースも多々あるだろう。
その場合は、headerオプションにNoneを指定すればOKだ。
# examples/ex2.csv
1,2,3,4,hoge
5,6,7,8,fuga
9,10,11,12,foo
df2 = pd.read_csv('examples/ex2.csv', header=None)
# 0 1 2 3 4
# 0 1 2 3 4 hoge
# 1 5 6 7 8 fuga
# 2 9 10 11 12 foo
namesオプション
また、ヘッダー行がないファイルの場合、namesオプションでファイルの読み込み時に任意のヘッダーを設定することもできる。
df2 = pd.read_csv('examples/ex2.csv', names=['a', 'b', 'c', 'd', 'message'])
print(df2)
# a b c d message
# 0 1 2 3 4 hoge
# 1 5 6 7 8 fuga
# 2 9 10 11 12 foo
index_colオプション
任意の列をデータフレームのインデックスにしたい場合、index_colオプションに列インデックス番号か列名を指定する。
df2 = pd.read_csv('examples/ex2.csv',
names=['a', 'b', 'c', 'd', 'message'],
index_col='message')
# a b c d
# message
# hoge 1 2 3 4
# fuga 5 6 7 8
# foo 9 10 11 12
sepオプションで正規表現指定
区切り文字にカンマなどの決まった文字が無い場合は、read_table関数のsepオプションへ正規表現を指定することで対応することができる。
1 2 3 4 hoge
5 6 7 8 fuga
9 10 11 12 foo
df3 = pd.read_table('examples/ex3.csv', sep='\s+')
# 1 2 3 4 hoge
# 0 5 6 7 8 fuga
# 1 9 10 11 12 foo
skiprowsオプション
以下のように不要な行が含まれたファイルを読み込む場合、skiprowsオプションを使って不要な行を読み込まないようにすることもできる。
1,2,3,4,hoge
test
test2
5,6,7,8,fuga
test3
9,10,11,12,foo
df3 = pd.read_csv('examples/ex4.csv', header=None, skiprows=[1, 2, 4])
# 0 1 2 3 4
# 0 1 2 3 4 hoge
# 1 5 6 7 8 fuga
# 2 9 10 11 12 foo