Pandas入門|04.データフレーム (DataFrame) とは|データフレーム作成、インデックスやカラムの変更方法、データ操作【Python必須ライブラリPandasを初心者にわかりやすく解説】

こんにちは。キノコードです。
この記事では、データフレーム (DataFrame) とは、データフレーム作成、インデックスやカラムの変更方法、データ操作について解説をします。
データフレームは、Pandasのスタート地点であり、ベースになる部分です。
というのも、例えば、Pandasの得意なデータ解析は、データを取得して、取得したデータをグループごとに集めたり、並び替えたり、グラフにするというプロセスを経ます。
データフレームは、その最初のデータを取得し、データを作るパートです。
そのため、データ分析のスタートでありベースとなる部分です。
また、データフレームは、エクセルの表形式のように、行と列で成り立っています。
他にも、データベースも表形式です。エクセルやデータベースを読み込むPandasのデータフレームは非常によく使われます。
したがって、データフレームは、重要な部分です。
初心者の方が理解できるように丁寧な説明を心がけました。
最後に確認問題もあるのでぜひトライしてみてください。
キノコードでは、pythonの入門コース、Pandas超入門コースの他に、データ可視化のmatplotlibや人工知能のレッスンもアップしていく予定です。
新しい動画が更新されたときに通知がいくように、また、復習をする時に動画がどこにいったかわからなくならないようにチャンネル登録をお願いします。

この記事の信頼性

この記事は、Youtubeにて日本最大級のプログラミング教育のチャンネルを運営しているキノコードが執筆、監修しています。
私自身は、2012年からプログラミング学習を始め、2019年以降はプログラミング教育に携わってきた専門家です。
他にも、私には下記のような実績や専門性があります。

  • キノコードは毎月10名以上、合計100名以上ののプログラミング学習者と1対1でお悩みを聞き、アドバイスをしています
  • キノコード自身は、プログラミングスクールに通ったり、本や有料の動画で勉強してきた経験もあります
  • キノコードは、Python学習サービス「キノクエスト」を運営しています
  • 本の出版、プログラミング雑誌への寄稿の実績があります

Python学習サービス「キノクエスト」のご紹介

キノコードでは、Pythonを習得するためのPython学習サービス「キノクエスト」を運営しています。
キノクエストには、学習カリキュラムがあり、学習順番に悩むことなく学習を進められます。
月額1,990円と本1冊分の値段です。

キノクエストの特徴は下記の通りです。

  • Python学習をしている仲間が集まるコミュニティがある
  • 1000問以上の問題を解いてプログラミングを習得
  • 環境構築不要ですぐに始められる
  • 動画と連動しているので、インプットもできる。
  • 月額1,990円で、コミュニティもセット

キノクエストを詳しく知りたい方は、紹介ページをご覧ください。

▼キノクエストの紹介ページはこちら▼
https://kino-code.com/kq_service_a/

レッスンで使ったファイルはこちら

キノクエストでアカウントの新規登録に進み、メール認証を完了します。

ログインした状態(プラン選択画面が表示されます)で下記のボタンをクリックいただくか、ファイルダウンロードページのURL:https://kinoquest.jp/main/file_download/を直接アドレスバーに入力ください。

それでは解説をはじめます。

データフレームとは

データフレームについて、動画の最初の方でふれましたが、もう少し詳しく説明していきます。
データフレームとは、ラベル付きニ次元配列のことです。

配列とは、データの集まりのことです。
配列が1つなら、1次元配列です。
1行にたくさん数字があるだけです。つまり、横に広がるだけです。
一方、二次元になるとと、縦に広がっていきます。
つまり、二次元配列とは、横と縦にデータが集まっていることになります。
Pythonでは、配列のことをリストといいます。
リストが1つある状態は1次元配列です。
2つある状態が2次元配列です。
では、3つできた場合は3次元でしょうか?
この場合も2次元です。
なぜなら、角括弧が2つです。
行と列で表すなら、このような感じです。
3次元の場合は、奥行きです。
さて話を戻して、データフレームは、2次元の配列です。
横のことを列、縦のことを行といいます。
つまり、データフレームは、エクセルの表のように、行と列で成り立っているイメージです。
行には行名であるインデックス、列名であるカラムがあります。2次元の配列だけではなく行名や列名を付けられることが、ラベル付き配列の「ラベル」である理由です。
そして、インデックスとカラムの他に、データ部分があります。
つまり、データフレームはインデックスとカラムとデータ部分の3つから成り立っています。
なお、データフレームから列を取り出すとシリーズというものになります。
逆の言い方をすると、データフレームはシリーズの集まりとも言えます。
シリーズとは、ラベル付き一次元配列のことです。
シリーズについては、次回のレッスンで詳しく説明します。
それでは、実際に作成してどのようなものか見てみましょう。

データフレーム作成方法

データフレームの作成方法はいくつかあります。
このレッスンでは、3つの作成方法を紹介します。
1つ目は、リスト型の値を持った配列を使う方法です。

Pandasインストール

まず、Pandasをインポートしてから始めます。
import pandas as pd
「as」は、ライブラリ名を好きな名前で使うことができます。
したがって、この記述により「pandas」を「pd」という名前で使うことができます。
それでは実行します。インポートされました。

2次元リストを使った作成方法

それでは、データフレームを作っていきましょう。
データフレームの完成イメージは、このようになります。
インデックス名を「idx01~03」、カラム名を「col01~03」にします。
データの部分を、1行目は「1~3」、2行目は「4~6」、3行目は「7~9」にします。
それでは、コードをみていきましょう。
「df」という変数を書きます。
次に、イコール、pd、ドット、DataFrameを書きます。
そして、引数に2次元のリストを書いて、カラム名、インデックス名を書いていきます。
2次元のリスト部分は、リストの中にリストを作るイメージです。
外側のリストを書いて、内側のリストに「1~3」、「4~6」、「7~9」のようなリストを3つ書きます。
リストの作り方については、「Python超入門コース リスト」をご覧ください。右上にカードがでているはずです。
次に、カンマを書いて、カラム名を指定していきます。
まず、「columns」を書いて、イコール、カラム名のリストを書きます。
カラム名は、「col01~03」とします。
最後に、カンマを書いて、インデックス名を指定していきます。
イコール、インデックス名のリストを書きます。
インデックス名は、「idx01~03」とします。
これで、データフレームができました。
それでは、中身をみてみましょう。
スライドと同じデータフレームができました。

NumPyインストール

df = pd.DataFrame(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]),
columns=['col01', 'col02', 'col03'],
index=['idx01', 'idx02', 'idx03'])
df
2つ目に、NumPyの配列を使ったデータフレームの作成方法をみていきます。
import numpy as np
まず、NumPyをインポートしてから始めます。
NumPyとは、Pythonのライブラリです。
NumPyとは、高速にリストの計算をするためのライブラリのことです。
このNumPyをもとにデータフレームを作ることができます。
ここでも「as」を書いて、「numpy」を「np」という名前で使えるようにします。
それでは実行します。インポートされました。

NumPy配列を使った作成方法

NumPy配列を使った作成方法

最初の10行とってくる

df_population_data.head()
データフレームの最初の5行だけをみたい場合はheadメソッドを使います。
変数(df_population_data)のあとに、ドットを書いて、headメソッドを書きます。
実行してみましょう。
最初の5件を表示しました。
df_population_data.head(10)
headメソッドはデフォルトが5になっています。
10行表示させたい場合は、丸括弧の中に10と記述します。
実行してみます。10行だけ表示できました。
df_population_data.tail(10)
最後の10行だけ表示させたい場合は、tailメソッドです。
最後の10行だけ表示できました。

インデックス、カラム参照

df.index
次に、インデックスやカラムの値を取得する方法を説明します。
それでは、インデックスの値を取得してみましょう。
まず、df、ドット、indexを書きます。
実行します。インデックスの値が表示されました。
dtypeというものがありますね。これは、データ型を表しています。
object型ということになります。
df.columns
次に、カラムの値を参照してみましょう。
まず、df、ドット、columnsを書きます。
実行します。カラムの値が表示されました。
カラムもobject型になります。

辞書型を使った作成方法

df = pd.DataFrame({'col01':[1, 2, 3], 'col02':[4, 5, 6], 'col03':[7, 8, 9]})
df
3つ目に、辞書型を使ったデータフレーム作成方法をみていきます。
まず、df、イコール、ドット、DataFrameを書きます。
次に、辞書型を使って書いていきます。
波括弧を書いて、シングルクォーテーション、カラム名の「col1」、コロン、「1~3」のリストを書きます。
次に、カンマを書いて、シングルクォーテーション、カラム名の「col2」、コロン、「4~6」のリストを書きます。
最後に、カンマを書いて、シングルクォーテーション、カラム名の「col3」、コロン、「7~9」のリストを書きます。
それでは、実行してみます。
データフレームができました。
df = pd.DataFrame({'col01':[1, 2, 3], 'col02':[4, 5, 6], 'col03':[7, 8, 9]})
df.index = ['idx01', 'idx02', 'idx03']
df
インデックス名が設定されてません。
インデックスは後から設定できます。
それでは、インデックスを設定します。
まず、df、ドット、index、イコール、インデックス名のリストを書きます。
実行してみます。
インデックス名が追加されました。
df = pd.DataFrame({'col01':[1, 2, 3], 'col02':[4, 5, 6], 'col03':[7, 8, 9]}
,index=['idx01', 'idx02', 'idx03'])
df
データフレームを作ってから、インデックスを追加してきました。
今度は、データフレームを作るときに、インデックスをつけることもできます。
まず、先ほど書いたインデックスを設定しないで作成するコードを書きます。
次に、カンマを書いて、index、イコール、インデックス名のリストを書きます。
それでは、実行してみます。
最初からインデックスが設定されています。
データフレームの作り方は、分かりましたでしょうか。
Pandasはデータフレームをよく使うので、動画を繰り返し確認して覚えてくださいね。

カラム、インデックスの操作

df = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
df
それでは、カラムとインデックスの操作について説明します。
まず、リストを使い、カラムとインデックスを指定しないでデータフレームを作ります。
df、イコール、pd、ドット、DataFrameを書きます。
次に、引数に2次元のリストを書きます。
それでは、実行してみます。
カラムもインデックスも設定されていません。
df.columns=['col01','col02','col03']
次に、カラムとインデックスを設定していきましょう。
まず、カラムを設定していきます。
df、ドット、イコール、カラム名のリストを書きます。
df.index=['idx01','idx02','idx03']
つぎに、インデックスを設定していきます。
df、ドット、イコール、インデックス名のリストを書きます。
実行してみましょう。
カラムとインデックスが設定されました。
df.columns=['col04','col05','col06']
次に、カラム名を変更していきます。
df、ドット、イコール、新しいカラム名のリストを書きます。
あとからカラムを追加するやりかたと一緒ですね。
では、実行してみます。
カラム名が変わりました。

renameメソッドでカラム名変更

df = df.rename(columns={'col04': 'x'})
次に、renameメソッドを使って、カラム名の一部を変更します。
renameメソッドは、行名・列名を変更することができます。
今回は、「col04」を「x」に変更します。
まず、df、イコール、df、ドット、renameを書きます。
次に、引数の中にカラムやインデックスをしています。
そして、columns、イコール、辞書型で元の値と新しい値を指定します。
最後に、変更する値(col04)、コロン、新しい値(x)を書きます。
それでは、実行してみます。
カラム名が変わりました。
df = df.rename(columns={'col05': 'y','col06': 'z'})
次に、同時に2つのカラムを変更します。
今回は、「col05」を「y」に、「col06」を「z」に変更していきます。
先ほどと同じように、df、イコール、df、ドット、renameを書きます。
引数の中に、columns、イコール、辞書型で元の値と新しい値を指定します。
それでは、実行していきます。
カラム名が変更されました。

renameメソッドでインデックス名変更

df = df.rename(index={'idx01': 'w'})
次に、インデックス名を変更していきます。
今回は、「idx01」を「w」に変更していきます。
これも先ほどと同様に、df、イコール、df、ドット、renameを書きます。
引数の中に、index、イコール、辞書型で元の値と新しい値を指定します。
それでは、実行していきます。
インデックス名が変更されました。

列取得

df['x']
次に、列名を取得する方法を説明していきます。
データフレームから列名を指定して、シリーズとして「x」列を取得します。
dfを書いて、角括弧、シングルクォーテーション、「x」を書きます。
それでは、実行します。
列の値、列名、データ型が表示されました。
データ型については、「Python超入門コース データ型」をご覧ください。
ちなみに、このデータ型は、列xのデータ部分のデータ型です。
DataFrameは、1列取り出すとSeriesになるとお伝えしました。
データ型を確認してみましょう。
type(df['x'])
データ型を知りたい場合は、知りたいデータを丸括弧で括ってtypeです。
実行してみます。
seriesとなっています。
df[['x']]
次に、列名を指定してデータフレームとして取得する方法を説明します。
dfを書いて、角括弧を2回書きます。
次に、シングルクォーテーション、「x」を書きます。
実行してみましょう。
データフレームがとして取得することができました。
type(df[['x']])
こちらもデータ型を確認してみます。
DataFrameになっています。

locで行取得

df.loc['w']
次に、locを使って、行や列を取得する方法をみていきます。
locは、行名や列名を指定して、行や列を取得します。
それでは、行を取得していきます。
一番最初で作ったデータフレームをもう一度作成します。
df、loc、角括弧、シングルクォーテーション、「w」を書きます。
実行してみます。
行を取得することができました。

locで行と列を指定して取得

df.loc['w','z']
次に、行と列を指定して、値を取得していきます。
locの角括弧内は、最初に行、最後に列を指定します。
それでは、行に「w」、列に「z」を指定します。
df、loc、角括弧、シングルクォーテーション、「x」、カンマ、シングルクォーテーション、「z」を書きます。
実行してみましょう。
「3」が取得できました。

locで列取得

df.loc[:,'x']
次に、列を取得します。
「x」列を指定して値を取得します。
df、loc、角括弧、シングルクォーテーション、コロン、カンマ、シングルクォーテーション、「x」を書きます。
コロンは、全部という意味で列を指定するときに使います。
実行してみましょう。
列を取得することができました。
df.iloc[:,0]
次に、loc、ilocを使って、行や列を取得します。
ilocは、行の番号や列の番号を指定して、行や列を取得します。
「x」列を指定して値を取得します。
df、iloc、角括弧、コロン、カンマ、「0」を書きます。
実行してみます。
列を取得することができました。

locでデータ操作

df = pd.DataFrame({'col01':[1, 2, 3],
'col02':[4, 5, 6],
'col03':[7, 8, 9]}
,index=['idx01', 'idx02', 'idx03'])
次に、データの操作について説明していきます。
まず、データフレームを作ります。
まず、インデックス名を「idx01~03」、カラム名を「col01~03」、データの部分を1行目は「1~3」、2行目は「4~6」、3行目は「7~9」のデータフレームを作ります。
df.loc['idx03','col02']
まず、「idx03」行、「col02」列を指定して値を取得します。
df、loc、角括弧、シングルクォーテーション、行名、カンマ、シングルクォーテーション、列名を書きます。
実行してみます。
6が取得できました。
df.loc['idx03','col02']=100
df.loc['idx03','col02']
次に、locを使って、データフレームの指定したところのデータを変更していきます。
先ほど取得した値を100に変更します。
df、loc、角括弧、シングルクォーテーション、行名、カンマ、シングルクォーテーション、列名を書きます。
次に、イコール、100を書きます。
実行してみます。
100が取得できました。

複数のデータ変更

df.loc[:,'col03']=['Tokyo','Osaka','Hokkaido']
次に、一度に複数の値を変更していきます。
一度に変更したいときは、値はリスト型にします。
それでは、「col03」列を全て都道府県名に変えます。
df、loc、角括弧、シングルクォーテーション、コロン、カンマ、シングルクォーテーション、列名を書きます。
次に、イコール、都道府県名のリストを書きます。
実行してみましょう。
複数の値が変更することができました。

スライスを使ってデータ取得

df.loc[:,'col02':'col03']
次に、スライスを使って、2列目から3列目を取得してみます。
スライスとは、リストや辞書型のようなデータが順番に並べられたものを取り出したいときに使う操作です。
このスライスで2列目から3列目を取り出します。
df、loc、角括弧、シングルクォーテーション、コロン、カンマ、2列目の列名、コロン、3列目の列名を書きます。
実行してみましょう。
2列目から3列目を取得できました。
df.iloc[:,1:3]
次に、ilocを使って、先ほどと同じように2列目から3列目を取得してみます。
df、ドット、iloc、角括弧を書きます。
次に、行を指定するところにコロン、カンマを書きます。
最後に、列を指定するところに、1、コロン、3を書きます。
「1、コロン、3」の3は含まれないので、1と2ということになります。
列は、先頭から0、1、2と数えます。
したがって、2列目と3列目が取得できます。
実行してみましょう。
先ほどと同じように2列目から3列目が取得できました。

get_locメソッドで行番号取得

df.index.get_loc('idx03')
次に、get_locメソッドを使って、行番号を取得します。
「idx03」の行番号2を取得します。
df、ドット、index、ドット、get_locを書きます。
get_locメソッドの引数に行名を入れると、行番号が取得できます。
引数に、シングルクォーテーション、行名を書きます。
実行してみます。
2を取得することができました。
df.columns.get_loc('col02')
次に、get_locメソッドを使って、列番号を取得します。
「col02」の列番号1を取得します。
df、ドット、columns、ドット、get_locを書きます。
get_locメソッドの引数に列名を入れると、列番号が取得できます。
引数に、シングルクォーテーション、列名を書きます。
実行してみます。
1を取得することができました。
df.iloc[df.index.get_loc('idx03'),df.columns.get_loc('col02')]=1000
df
次に、先ほど説明した行番号と列番号を使って、ilocでデータを変更してみましょう。
2行目と1列目のデータを1000に変更してみます。
df、iloc、角括弧を書きます。
次に、get_locメソッドで行番号を取得した記述、カンマ、get_locメソッドで列番号を取得した記述を書きます。
最後に、イコール、1000を書きます。
それでは、実行してみましょう。
2行目と1列目のデータが1000に変更されました。

データ型を調べる

df.dtypes
次に、列ごとのデータ部分のデータ型を調べる方法を説明します。
dtypesを使うと、列ごとにデータ型を調べることができます。
データを操作しているときに、データ型が違ってエラーになることがあります。
dtypesは、よく使うので覚えておきましょう。
df、ドット、dtypesを書きます。
実行してみます。
それぞれのデータ型が表示されました。

行数・列数取得

df.shape
次に、行数・列数を取得する方法を説明します。
shapeを使うと、行数と列数をまとめて取得することができます。
df、ドット、shapeを書きます。
実行してみます。
行数と列数が取得できました。

行と列を入れ替え

df = df.T
df
最後に、行と列を入れ替える方法を説明します。
データフレームのT属性を使って、行と列を入れ替えます。
df、ドット、大文字のTを書きます。
実行してみましょう。
行と列が入れ替わりました。

確認問題

最後に確認問題をやっていきましょう。

df = pd.DataFrame({'col01':[1, 2, 3], 'col02':[4, 5, 6], 'col03':[7, 8, 9]}
,index=['idx01', 'idx02', 'idx03'])
df

こちらのデータフレームを操作してみましょう。
①カラムの値を取得してください。
②「idx03」を「idx04」に変更してください。
③「col01」列をシリーズで取得してください。
④ilocを使って、1列目を取得してください。
⑤locとスライスを使って、1列目から2列目を取得してください。
⑥データフレームの各列のデータ型を調べてください。
一旦、動画を止めて記述してみてください。
答え合わせです。
①df.columns
②df = df.rename(index={'idx03': 'idx04'})
 df
③df['col01']
④df.iloc[:, 0]
⑤df.loc[:,'col01':'col02']
⑥df.dtypes
みなさん、いかがでしたでしょうか。
データフレームは理解できましたでしょうか。
データフレームには、作り方や操作方法などがたくさんあるので、慣れるまで大変かもしれません。
でも、使いこなしていくうちに必ず使えるようになります。
まずは、繰り返し動画をみて、習得していきましょう。
キノコードでは、
キノコードでは、pythonやPandasの他に、データ可視化のmatplotlibや人工知能のレッスンもアップしていく予定です。
気に入ってくださった方は、チャンネル登録をお願いします。
それでは、次回のレッスンでお会いしましょう。