pandasでデータフレームを作る方法とCSV読み込みを徹底解説|Python
この記事では、データフレーム(DataFrame)を生成する方法を徹底解説します。まず、リストやタプル、辞書、Numpy配列などから新しいデータフレームを生成する方法を説明します。次に、CSVファイルからデータフレームを生成する方法について、さまざまなパターンを網羅しつつ説明します。目次から知りたい情報に直接ジャンプできるように構成していますので、ぜひ活用してください。
pandasのデータフレーム生成・読み込みについて
pandasを利用する場合、データをデータフレーム(DataFrame)に変換する作業が必要になります。pandasでは、データフレームへの変換は、さまざまなデータソースから行うことが可能です。
この記事では、私がよく使うデータフレームの生成パターンをいくつか紹介します。
また、CSVファイルを読み込んでデータフレームを生成することも多いので、CSVファイルの読み込みについても、できるだけ多くのパターンを網羅して解説を行いました。
ネット上でも同様の情報は見かけるかもしれませんが、欲しい情報が簡潔にまとまったページが見つからなかったため、今回新たに作成しました。
「データフレームの生成とCSVファイルの読み込み」に特化した記事として、ぜひ活用してください。
データフレームの生成パターンを網羅する
リスト(list)から作る
リストから作る方法です。列名(カラム名)は、columns
でつける必要があります。
import pandas as pd
df = pd.DataFrame([[1,0.1,'a'],[3,1.2,'b']], columns=['x', 'y', 'z'])
display(df)
x | y | z | |
0 | 1 | 0.1 | a |
1 | 3 | 1.2 | b |
タプル(tuple)から作る
リストから作る場合と同様です。列名(カラム名)は、columns
でつける必要があります。
import pandas as pd
df = pd.DataFrame(((1,0.1,'a'), (3,1.2,'b')), columns=['x', 'y', 'z'])
display(df)
x | y | z | |
0 | 1 | 0.1 | a |
1 | 3 | 1.2 | b |
辞書(dict)から作る
辞書から作成する場合は、辞書のキーがカラム名になります。
import pandas as pd
df = pd.DataFrame({'x': [1,3], 'y':[0.1,1.2], 'z':['a', 'b']})
display(df)
x | y | z | |
0 | 1 | 0.1 | a |
1 | 3 | 1.2 | b |
numpyから作る
numpyから作る場合もリストから作る場合とほぼ同じです。
import pandas as pd
import numpy as np
array = np.array([[1,0.1,'a'],[3,1.2,'b']])
df = pd.DataFrame(array, columns=['x', 'y', 'z'])
display(df)
x | y | z | |
0 | 1 | 0.1 | a |
1 | 3 | 1.2 | b |
CSVファイルを読み込んでデータフレームを作成する
ヘッダ付きCSVファイルを読み込む
1行目にカラム名(ヘッダ)がある場合は、自動的に1行目をカラム名として読み込みます。
x,y,z
1, 0.1, a
3, 1.2, b
import pandas as pd
df = pd.read_csv('test.csv')
display(df)
x | y | z | |
0 | 1 | 0.1 | a |
1 | 3 | 1.2 | b |
ヘッダーとなる文字列に以下のような空白がある場合、
x, y, z
読み込むとカラム名にも空白が入ってしまいます。ヘッダーの部分に空白がある場合は、カラム名に空白が含まれていることを意識する必要があります。
df.columns
# Index([' x', ' y', ' z'], dtype='object')
ヘッダなしCSVファイルを読み込む
ヘッダがない場合ば、header=None
とします。また、カラムに名前をつけたい場合はnames
でカラム名を指定します。
1, 0.1, a
3, 1.2, b
df = pd.read_csv('test.csv', header=None, names=['x', 'y', 'z'])
display(df)
x | y | z | |
0 | 1 | 0.1 | a |
1 | 3 | 1.2 | b |
先頭からN行スキップしてCSVファイルを読み込む
ファイルの先頭にコメント行など余分なものがある場合には、スキップさせることができます。
この例では、skiprows
で4行をスキップして読み込んでいます。
# データ列の説明
# x : 整数
# y : 小数点
# z : 文字列
x,y,z
1, 0.1, a
3, 1.2, b
import pandas as pd
df = pd.read_csv('test.csv', skiprows=4)
display(df)
x | y | z | |
0 | 1 | 0.1 | a |
1 | 3 | 1.2 | b |
スキップする行を指定してCSVファイルを読み込む
skiprows
では、スキップする行を指定することも可能です。
この例では、0行目、1行目、末尾の5行目をスキップするように指定します。
※インデックスが0始まりなことに注意してください。
# データ列の説明
# begin data
x,y,z
1, 0.1, a
3, 1.2, b
# end of data
import pandas as pd
df = pd.read_csv('test.csv', skiprows=[0,1,5])
display(df)
x | y | z | |
0 | 1 | 0.1 | a |
1 | 3 | 1.2 | b |
先頭からN行をCSVファイルから読み込む
先頭からN行だけファイルから読み込みます。
例では、カラム数の違う2つの表が1つのファイルに入っている例です。上の表だけ取り出すには、nrows=2
を指定します。ヘッダーを含めると3行ですが、ヘッダーを含めない行数を指定することに注意してください。
x,y,z
1, 0.1, a
3, 1.2, b
# end of data
a,b
1,2
3,4
import pandas as pd
df = pd.read_csv('test.csv', nrows=2) # headerの行は含まれないことに注意
display(df)
x | y | z | |
0 | 1 | 0.1 | a |
1 | 3 | 1.2 | b |
データの型を指定してCSVファイルを読み込む
pandasでcsvファイルを読み込む場合は、データの型を自動で類推してくれます。
明示的に指定したい場合には、dtype
で型を指定します。
{ カラム名:型, ….}の形で指定することで、それぞれのカラムの型を指定することが可能です。
x,y,z
1,2,3
4,5,6
import pandas as pd
df = pd.read_csv('test.csv', dtype={'x': int, 'y': float, 'z': str})
display(df)
print(df.dtypes)
# x int64
# y float64
# z object
# dtype: object
その他のTIPS
- ZIPで圧縮されたCSVファイルも読み込むことが可能
- URLを指定してネットからCSVファイルを読み込むことも可能
まとめ
pandasでのデータ生成とcsvファイルの読み込みについて例を使って説明しました。pandasは多機能で覚えきれないので、いくつかに分けて使い方をまとめたいと思っています。
頻繁に使い方を検索するので、自分向けの整理を兼ねています