【Python】初心者でも簡単 DataFrameを使った表・テーブル作成方法のまとめ(pandas)

Python Create Tables in Several Ways Python
記事内に広告が含まれていることがあります。
[PR]

PandasのDataFrameを使って、一つの表を作成する場合に、複数の方法があります。

表(テーブル)の元となるデータを用意して、行名や列名をつけて、表(テーブル)データを作成する手順を実例を用いてわかりやすくまとめています。

なお、ベースとなる表はcsvファイルで作って読み込むのが一番早いです(私感)

はじめに(作成する表)

例として以下のような表を作成します。

image.png
  • 列名:row0~row5
  • 行名:col0~col4
  • col0:1~6
  • col1:col0*100
  • col2:col0/3
  • col3:AAA~FFF
  • col4:col3 & col1

2次元listから作成する方法

■2次元配列とは
[[‘A’,’B’,,],[‘C’,’D’,,],,,]

1次元のリスト[‘A’,’B’,,]が同一の[ ]内に複数並列で入ったもの。

下記3パターンで確認する。
(1)行列名を後から指定
(2)表作成時にオプションで指定
(3)表から行名となる列を指定

行列名を後から指定する

▼手順
①各行を一つのlistにする
②表に変換
③行名の変更
④列名の変更



①各行を一つのlistとして並列に並べる2次元配列

list = [
  [1, 100, 0.33, 'AAA', 'AAA100'], 
  [2, 200, 0.67, 'BBB', 'BBB200'], 
  [3, 300, 1, 'CCC', 'CCC300'], 
  [4, 400, 1.33, 'DDD', 'DDD400'], 
  [5, 500, 1.67, 'EEE', 'EEE500'], 
  [6, 600, 2, 'FFF', 'FFF600']
]



②表に変換
pd.DataFrame(list)
 └pandasのDataFrameで表に変換。

df = pd.DataFrame(list)
df

行と列の名前は自動で割り振られた番号になる。



③行名の変更
df.index = [‘A’,’B’,,,]

・行名(index)を指定した名称に変更する。
・[ ]内の要素の数と行の数を一致させる。しないとエラー。

df.index = ['row0','row1','row2','row3','row4','row5']
df




④列名の変更
df.columns = [‘a’,’b’,,,]

・列名(column)を指定した名称に変更する。
・[ ]内の要素の数と行の数を一致させる。しないとエラー。

df.columns = ['col0','col1','col2','col3','col4']
df


以上で完成。

表作成時に行列名をオプションで指定する

▼手順
①各行を一つのlistにする
②表に変換(オプションで行列名を指定)
 2-1 columnsオプション
 2-2 indexオプション



①各行を一つのlistとして並列に並べる

list = [
  [1, 100, 0.33, 'AAA', 'AAA100'], 
  [2, 200, 0.67, 'BBB', 'BBB200'], 
  [3, 300, 1, 'CCC', 'CCC300'], 
  [4, 400, 1.33, 'DDD', 'DDD400'], 
  [5, 500, 1.67, 'EEE', 'EEE500'], 
  [6, 600, 2, 'FFF', 'FFF600']
]



②表に変換(オプションで行列名を指定)
pd.DataFrame(list, index=[‘A’,’B’,,,], columns=[‘a’,’b’,,,])
 └「list」:表にする配列
 └ index=[‘A’,’B’,,,]:indexオプション
 └ columns=[‘a’,’b’,,,]:columnsオプション
 └オプションの[ ]の中は変数で指定可。

ind = ['row0','row1','row2','row3','row4','row5']
col = ['col0','col1','col2','col3','col4']

df = pd.DataFrame(list, index=ind, columns=col)
df
image.png

以上で完成。

表から行名となる列を指定

▼手順
①各行を一つのlistにする
②表に変換
③列名を変更
④行名となる列を指定



①各行を一つのlistにする
行名を2次元配列の中に含める。

list = [
  ['row0', 1, 100, 0.33, 'AAA', 'AAA100'], 
  ['row1', 2, 200, 0.67, 'BBB', 'BBB200'], 
  ['row2', 3, 300, 1, 'CCC', 'CCC300'], 
  ['row3', 4, 400, 1.33, 'DDD', 'DDD400'], 
  ['row4', 5, 500, 1.67, 'EEE', 'EEE500'], 
  ['row5', 6, 600, 2, 'FFF', 'FFF600']
]



②表に変換

pd.DataFrame(list)
 └ 「list」:配列データの入った変数表に変換

df = pd.DataFrame(list)
df

image.png

行と列の名前は自動で割り振られた番号になる。



③列名を変更

df.columns = [‘a’,’b’,,,]

・列名(column)を指定した名称に変更する。
・[ ]内の要素の数と行の数を一致させる。しないとエラー。

※次の列名となる行の指定(set_index)でマルチインデックスになるのを防ぐため、行名となる列名は空欄「”」にする。

df.columns =  ['','col0','col1','col2','col3','col4']
df
image.png



④行名となる列を指定
set_index(‘列名’)

行名となる列を指定。一番左端の列には名前がついていないので列名は「”」を指定する。

df = df.set_index('')
df
image.png

一番左端の列名「”」が見出しとして設定された。

1次元listから作成

下記3パターンで確認する。
(1)各listをまとめて結合
(2)各listを一つづつ結合
(3)数式で結合

各listをまとめて結合

▼手順
①各行ごとのlistを作成
②まとめて表に変換
③行名の変更
④列名の変更



①各行ごとのlistを作成

listA = [1, 100, 0.33, 'AAA', 'AAA100']
listB = [2, 200, 0.67, 'BBB', 'BBB200']
listC = [3, 300, 1, 'CCC', 'CCC300']
listD = [4, 400, 1.33, 'DDD', 'DDD400']
listE = [5, 500, 1.67, 'EEE', 'EEE500']
listF = [6, 600, 2, 'FFF', 'FFF600']



②まとめて表に変換
pd.DataFrame([A,B,,,])
└ 「A」「B」1次元のlist
└ 要素の数は等しい

pd.DataFrame( [listA, listB, listC, listD, listE, listF] )
image.png



③行名の変更
df.index = [‘A’,’B’,,,]

・行名(index)を指定した名称に変更する。
・[ ]内の要素の数と行の数を一致させる。しないとエラー。

df.index = ['row0','row1','row2','row3','row4','row5']
df
image.png



④列名を変更

df.columns = [‘a’,’b’,,,]

・列名(column)を指定した名称に変更する。
・[ ]内の要素の数と行の数を一致させる。しないとエラー。

df.columns =  ['','col0','col1','col2','col3','col4']
df

以上で完成。

各listを一つづつ結合

▼手順
①各行ごとのlistを作成
②表の作成
③表に列を追加
④行名の変更
⑤転置



①各行ごとのlistを作成listを作成

listA = [1, 100, 0.33, 'AAA', 'AAA100']
listB = [2, 200, 0.67, 'BBB', 'BBB200']
listC = [3, 300, 1, 'CCC', 'CCC300']
listD = [4, 400, 1.33, 'DDD', 'DDD400']
listE = [5, 500, 1.67, 'EEE', 'EEE500']
listF = [6, 600, 2, 'FFF', 'FFF600']



②表の作成
1つのlistから表を生成する。
pd.DataFrame(list, columns=[‘A’])
 └ 「listA」:配列データ
 └ 「columns=[‘A’]」:列名をAにする表の作成

df= pd.DataFrame(listA, columns=['row0'])
df

※1列の読込の場合、行列が転置した状態になる。


▼補足:列名をつけて表を作成する方法
表作成時に列名を指定する別の方法。
pd.DataFrame({‘A’:[1,2,,],’B’:[3,4,,],})
└({ })の中に‘列名’:[配列]を記載

pd.DataFrame({'row0':[1, 100, 0.33, 'AAA', 'AAA100']})

列名をつけて作成(複数列)

pd.DataFrame({'row0':[1, 100, 0.33, 'AAA', 'AAA100'], 'row1':[2, 200, 0.67, 'BBB', 'BBB200']})



③表に列を追加
df[‘B’] = pd.DataFrame(list)
 └ 「B」:追加する列名
 └ 「list」:追加する表データ

df['row1'] = pd.DataFrame(listB)
df['row2'] = pd.DataFrame(listC)
df['row3'] = pd.DataFrame(listD)
df['row4'] = pd.DataFrame(listE)
df['row5'] = pd.DataFrame(listF)
df



④行名の変更

df.index = [‘A’,’B’,,,]

df.index = ['col0','col1','col2','col3','col4']
df

⑤転置
df.T
 └行列を入れ替える。

df = df.T
df

以上で完成。

数式で結合

各列に規則性がある場合、数式を用いて列を結合できる。

▼規則性

  • col1:col0*100
  • col2:col0/3
  • col4:col3 & col1

▼手順
①listを作成
②表を作成
③数式を使って表に列を追加
④行名の変更



①listを作成
ベースとなる列を作成する。

col0とcol3の用の2つ分。

listA = [1,2,3,4,5,6]
listD = ['AAA', 'BBB', 'CCC', 'DDD', 'EEE', 'FFF']



②表の作成
pd.DataFrame(list, columns=[‘A’])
 └ 「listA」:配列データ
 └ 「columns=[‘A’]」:列名をAにする表の作成

df = pd.DataFrame(listA, columns=['col0'])
df



③数式を使って表に列を追加
df[‘B’] = df[‘A’]/2
 └ 「B」:追加する列名
 └ 「df[‘A’]」/2:既存の列名Aを2で割った値を代入

・df[‘C’] = df[‘A’] + df[‘B’]
 └ 列「A」と「B」の値を結合する
 └ ※str + intはエラー(型を合わせる)

・df[‘A’].astype(str)
 └ 列「A」を「str」型に変更する数式を使って表に列を追加

df['col1'] = df['col0'] * 100
df['col2'] = df['col0'] / 3
df['col3'] = pd.DataFrame(listD)
df['col4'] = df['col3'] + df['col1'].astype(str)
df




④行名の変更
df.index = [‘A’,’B’,,,]

df.index=['row0','row1','row2','row3','row4','row5']
df

以上で完成。

csvファイルで作成し読込み

▼手順
①csvファイルで表を作成
②read_csvメソッドでインポート
 └ 見出し列の指定



①csvファイルで表を作成
下記のような表を作成する。



②read_csvメソッドでインポート
read_csv(‘ファルパス’, index_col=n)
 └ 「’ファイルパス’」:絶対パスでも相対パスでもOK
 └ 「index_col=n」:見出しとなる列番号(n:整数)を指定



▼desktopのtest.csvファイルを読み込む場合

import pandas as pd
pd.read_csv('~/desktop/test.csv', index_col=0)

以上で完成。

CSVファイル読み込み時は、行名や列名となる行列を指定したり、読み込む範囲を指定することも可能。詳細は以下ページをご参考。

使用したメソッド等一覧

pd.DataFrame(list)
 └ listを表に変換

pd.DataFrame([A,B,,,])
 └ 一次元listをまとめて表に変換

df.index = ['A','B',,,]
 └ 行名の変更

df.columns = ['a','b',,,]
 └ 列名の変更

pd.DataFrame(list, index=['A','B',,,])
 └ 表作成時に行名を指定

pd.DataFrame(list, columns=['a','b',,,])
 └ 表作成時に列名を指定

pd.DataFrame({'A':[1,2,,],'B':[3,4,,],})
 └表作成時に列名を指定
 └({ })の中に'列名':[配列]を記載

set_index('a')
 └ 行名となる列を指定

df['b'] = pd.DataFrame(list)
 └ 表(df)に列(列名b)を追加

df.T
 └ 転置

df['B'] = df['A']/2
 └ 「B」:追加する列名
 └ 「df[‘A’]」/2:既存の列名Aを2で割った値を代入

df['C'] = df['A'] + df['B']
 └ 列「A」と「B」の値を結合する
 └ ※str + intはエラー(型を合わせる)

df['A'].astype(str)
 └ 列「A」を「str」型に変更する

[['A','B',,],['C','D',,],,,]
 └ 2次元配列

タイトルとURLをコピーしました