【Python】表データの作成&行と列の名前を変更する方法|表作成の基本操作を実例で解説(配列(list), DataFrame, column, rename)

【Python】表データの作成&行と列の名前を変更する方法|表作成の基本操作を実例で解説(配列(list), DataFrame, column, rename) Python
記事内に広告が含まれていることがあります。

pythonのPandasモジュールを使って、配列(list)などの一般的なデータから、表を作成する方法について解説しています。

表を作成するときに列名を変更する方法や、表作成後に後から変更する方法、複数列を持った表データを作成する方法などを実例で紹介しています。

また、作成した表の列名と行名を後から変更する方法を、個別に変更するパターンと同時に変更するパターンで紹介しています。

使用するモジュール

表の作成には、pandasモジュールのDataFrameオブジェクトを使います。

Pandasは以下のように、省略名pdでインポートするのが一般的です。

import pandas as pd

DataFrameは次のように使います。

pd.DataFrame(配列)
  • 「pd」:pandasの略。pdインポート
  • 「DataFrame」:2次元の表データの作成

(参考)Python Pandas公式ページ

表を作成する方法

表を作成するために、表組にしたいデータを配列で用意します。

listA = ['AAA', 'BBB', 'CCC', 'DDD']

次のように、pd.Dataframeの引数に配列を渡せば、表として読み込まれます。

import pandas as pd

listA = ['AAA', 'BBB', 'CCC', 'DDD']
df1 = pd.DataFrame(listA)
df1

#出力
    0
0   AAA
1   BBB
2   CCC
3   DDD


・1列目は見出し(0からのインデックス番号)
・1行目は列名(0からのインデックス番号)



データを引数に直接入力しても作成できます。

import pandas as pd
pd.DataFrame(['AAA', 'BBB', 'CCC', 'DDD'])

#出力
    0
0   AAA
1   BBB
2   CCC
3   DDD

複数列の表を作成する方法

複数列をもった表を作成するには、方法が2つあります。

  1. DataFrameで表を作成後に配列(list)を追加する。
  2. DataFrameで2次元配列を表に変換する。
  3. DataFrameのデータを結合する。

DataFrameで表を作成後に配列(list)を追加する方法

DataFrameで表を作成後に配列(list)を追加するには、表組データに対して、列名と要素を指定して追加します。

df['aaa'] = ['AAA', 'BBB',,,]
  • df:表組データ
  • aaa:列名(数値でも可)
  • [‘AAA’, ‘BBB’,,,]:追加する配列
配列追加時の注意点
  • 表組データの行数と、追加するlistの要素の数が異なる場合はエラーになる。
  • +演算子で足し合わせると、列の中の各要素が足し合わされる。
import pandas as pd

listA = ['AAA', 'BBB', 'CCC', 'DDD']
df1= pd.DataFrame(listA)

df1[1] =  ['EEE', 'FFF', 'GGG', 'HHH']
df1

#出力
    0   1
0   AAA EEE
1   BBB FFF
2   CCC GGG
3   DDD HHH

エラー事例

表組データの行数と、追加するlistの要素の数が異なる場合はエラーになります。

import pandas as pd

listA = ['AAA', 'BBB', 'CCC', 'DDD']
df1= pd.DataFrame(listA)

df1[1] =  ['EEE', 'FFF', 'GGG']
df1

#出力
# ValueError: Length of values does not match length of index

DataFrameで2次元配列を表に変換する方法

複数列を持った表を作るには、2次元配列をDataFrameで表に変換することでも対応できます。

2次元配列は以下のような形になります。

lists = [ ['AAA', 'BBB', 'CCC', 'DDD'] , ['EEE', 'FFF', 'GGG', 'HHH'] ]

#または
listA = ['AAA', 'BBB', 'CCC', 'DDD']
listB = ['EEE', 'FFF', 'GGG', 'HHH']

lists = [listA, listB]

これをDataFrameで変換します。

import pandas as pd

listA = ['AAA', 'BBB', 'CCC', 'DDD']
listB = ['EEE', 'FFF', 'GGG', 'HHH']

lists = [listA, listB]
df = pd.DataFrame(lists)

print( df )

#出力
     0    1    2    3
0  AAA  BBB  CCC  DDD
1  EEE  FFF  GGG  HHH

DataFrameのデータを結合する方法

DataFrameのデータに、DataFrameのデータを結合することもできます。

df['aaa'] = dfB 
  • df:元の表
  • aaa:追加する列名(数値でも可)
  • dfB:DataFrameのデータを格納した変数(変数名は任意)

こちらも、元の表の要素数と追加するlistの要素数が異なる場合はエラーになります。

import pandas as pd

#表dfAを作成
listA = ['AAA', 'BBB', 'CCC', 'DDD']
dfA= pd.DataFrame(listA)

#表dfBを作成
listB =['EEE', 'FFF', 'GGG', 'HHH']
dfB= pd.DataFrame(listB)

#表dfAに表dfBを結合
dfA['1'] = dfB
dfA

#出力
    0   1
0   AAA EEE
1   BBB FFF
2   CCC GGG
3   DDD HHH

例:4列の表を作成

次のlistA~Dの4つの配列から、4列の表を作成する場合は以下のようになります。

一つ一つ足し合わせる場合

import pandas as pd

listA = ['AAA', 'BBB', 'CCC', 'DDD']
listB = ['EEE', 'FFF', 'GGG', 'HHH']
listC = ['III', 'JJJ', 'KKK', 'LLL']
listD = ['MMM', 'NNN', 'OOO', 'PPP']

dfA = pd.DataFrame(listA)
dfA[1] = listB
dfA[2] = listC
dfA[3] = listD

dfA


#出力
    0   1   2   3
0   AAA EEE III MMM
1   BBB FFF JJJ NNN
2   CCC GGG KKK OOO
3   DDD HHH LLL PPP


2次元配列にしてから表に変換する場合

import pandas as pd

listA = ['AAA', 'BBB', 'CCC', 'DDD']
listB = ['EEE', 'FFF', 'GGG', 'HHH']
listC = ['III', 'JJJ', 'KKK', 'LLL']
listD = ['MMM', 'NNN', 'OOO', 'PPP']

lists = [listA, listB, listC, listD]
df = pd.DataFrame(lists)

print( df )

列内の要素に文字列を追加する(+演算子)

+演算子でDataFrameの表を足し合わせると、各列の要素が結合されます。

import pandas as pd

listA = ['AAA', 'BBB', 'CCC', 'DDD']
dfA= pd.DataFrame(listA)

listB =['EEE', 'FFF', 'GGG', 'HHH']
dfB= pd.DataFrame(listB)

dfA + dfB

#出力
    0
0   AAAEEE
1   BBBFFF
2   CCCGGG
3   DDDHHH

列の名前を変更する方法

列名を変更するには主に以下の方法があります。

列名を変更する方法(列名の指定)
  1. 表作成時に指定する
  2. 既存の表データの列名を変更する
    1. columnsメソッド
    2. renameメソッド

表作成時に指定する方法

DataFrameのオプションで columns=[‘列の名前’] を指定します。

columns=['列の名前1', '列の名前2',,,] 
列名指定時の注意点
  • 角カッコ[ ] がない場合はエラーになります。 columns=’列の名前’ はNG。
  • 列の数と、columnsで指定する列名の数が一致すること(一致しない場合はエラーになります)
import pandas as pd

listA = ['AAA', 'BBB', 'CCC', 'DDD']
df2 = pd.DataFrame(listA, columns=['列名1'])
df2

print(df2)

#出力
   列名1
0  AAA
1  BBB
2  CCC
3  DDD

列が複数ある場合

import pandas as pd

listA = ['AAA', 'BBB', 'CCC', 'DDD']
listB = ['EEE', 'FFF', 'GGG', 'HHH']
listC = ['III', 'JJJ', 'KKK', 'LLL']
listD = ['MMM', 'NNN', 'OOO', 'PPP']

lists = [listA, listB, listC, listD]
df = pd.DataFrame(lists, columns=['列名1', '列名2', '列名3', '列名4'])

print( df )

#出力
   列名1  列名2  列名3  列名4
0  AAA  BBB  CCC  DDD
1  EEE  FFF  GGG  HHH
2  III  JJJ  KKK  LLL
3  MMM  NNN  OOO  PPP


既存の表データの列名を変更する方法

既存の表データの列名を変更するには、columnsメソッドとrenameメソッドを使う方法があります。

columnsメソッドは列名をまとめて変更する場合につかいます。renameメソッドは特定の列を指定して変更することができます。

また、columnsメソッドは元の表のデータが変わる破壊的処理です。renameメソッドは元の表のデータは変化せず、新たに変更した表を作成する非破壊処理です。

columnsメソッド

df.columns=['列の名前1', '列の名前2',,,] 
import pandas as pd

listA = ['AAA', 'BBB', 'CCC', 'DDD']
listB = ['EEE', 'FFF', 'GGG', 'HHH']
listC = ['III', 'JJJ', 'KKK', 'LLL']
listD = ['MMM', 'NNN', 'OOO', 'PPP']

lists = [listA, listB, listC, listD]
df = pd.DataFrame(lists)


#既存の表データの列名を変更
df.columns=['列名1', '列名2', '列名3', '列名4']

print( df )

#出力
   列名1  列名2  列名3  列名4
0  AAA  BBB  CCC  DDD
1  EEE  FFF  GGG  HHH
2  III  JJJ  KKK  LLL
3  MMM  NNN  OOO  PPP

renameメソッド

renameメソッドは非破壊で列名を変更できるメソッドです。元の表をコピーして、コピーした表のデータを変更するので、元の表はそのまま残ります。

df1 = df.rename(columns={'元の列名':'列名'})
  • df1 : 列名変更後の表データを格納する変数名(名前は任意)
  • df:表データ
  • .rename:dfオブジェクトに対してrenameメソッドを実行
renameメソッド利用時の注意点
  • 元の表は変更されない(※非破壊処理)
    • 変更後の表を別の変数に格納する必要がある
  • columnsは変更したい元の列名を指定する
  • 指定した列名が存在しない場合は変化なし
  • 複数変更する場合は、{ }の中にカンマで区切って記述する


import pandas as pd

listA = ['AAA', 'BBB', 'CCC', 'DDD']
listB = ['EEE', 'FFF', 'GGG', 'HHH']
listC = ['III', 'JJJ', 'KKK', 'LLL']
listD = ['MMM', 'NNN', 'OOO', 'PPP']

lists = [listA, listB, listC, listD]
df = pd.DataFrame(lists)

df.columns=['列名1', '列名2', '列名3', '列名4']


#列名2をcolumn2に変更し、別の変数df1に格納
df1 = df.rename(columns={'列名2':'column2'})

print( df1 )


#出力
   列名1 column2  列名3  列名4
0  AAA     BBB  CCC  DDD
1  EEE     FFF  GGG  HHH
2  III     JJJ  KKK  LLL
3  MMM     NNN  OOO  PPP

行の名前を変更する方法

列名を変更するには主に以下の方法があります。

列名を変更する方法(列名の指定)
  1. 表作成時に指定する
  2. 既存の表データの列名を変更する
    1. indexメソッド
    2. renameメソッド

表作成時に指定する方法

DataFrameのオプションで index=[ ‘行名1’, ‘行名2’,,,,]を指定します。

行名の指定は文字列、数値どちらも可能です。変数で指定することもできます。

注意点
  • 行数とindexで指定した要素数が一致している必要がある。
  • 要素の数が一致しないとエラーになる。

文字列で指定列名の変更

import pandas as pd

listA = ['AAA', 'BBB', 'CCC', 'DDD']
df1 = pd.DataFrame(listA, index=['111','222','333','444'])
df1

#出力
    0
111 AAA
222 BBB
333 CCC
444 DDD


数値で指定列名の変更

import pandas as pd

listA = ['AAA', 'BBB', 'CCC', 'DDD']
df1 = pd.DataFrame(listA, index=[111,22.2,3.33,444])
df1

#出力
    0
111.00  AAA
22.20   BBB
3.33    CCC
444.00  DDD


変数で指定列名の変更

import pandas as pd

listA = ['AAA', 'BBB', 'CCC', 'DDD']
indexA = ['111','222','333','444']

df1 = pd.DataFrame(listA, index=indexA)
df1

#出力
    0
111 AAA
222 BBB
333 CCC
444 DDD



既存の表データの列名を変更する方法

既存の表データの列名を変更するには、indexメソッドとrenameメソッドを使う方法があります。

indexメソッドは行名をまとめて変更する場合に使います。renameメソッドは特定の行を指定して変更することができます。

また、indexメソッドは元の表のデータが変わる破壊的処理です。renameメソッドは元の表のデータは変化せず、新たに変更した表を作成する非破壊処理です。

indexメソッド

df.index=['列の名前1', '列の名前2',,,] 

※行数とindexで指定した要素数が一致している必要があります。多かったり、少ないとエラーになります。

import pandas as pd

listA = ['AAA', 'BBB', 'CCC', 'DDD']
listB = ['EEE', 'FFF', 'GGG', 'HHH']
listC = ['III', 'JJJ', 'KKK', 'LLL']
listD = ['MMM', 'NNN', 'OOO', 'PPP']

lists = [listA, listB, listC, listD]
df = pd.DataFrame(lists)


#既存の表データの行名を変更
df.index=['行名1', '行名2', '行名3', '行名4']

print( df )

#出力
       0    1    2    3
行名1  AAA  BBB  CCC  DDD
行名2  EEE  FFF  GGG  HHH
行名3  III  JJJ  KKK  LLL
行名4  MMM  NNN  OOO  PPP

renameメソッド

renameメソッドは非破壊で列名を変更できるメソッドです。元の表をコピーして、コピーした表のデータを変更するので、元の表はそのまま残ります。

df1 = df.rename(index={'元の行の名前':'変更後の行の名前'})
  • df1 : 行名変更後の表データを格納する変数名(名前は任意)
  • df:元の表データ
  • .rename:dfオブジェクトに対してrenameメソッドを実行
renameメソッド利用時の注意点
  • 元の表は変更されない(※非破壊処理)
    • 変更後の表を別の変数に格納する必要がある
  • indexでは変更したい元の行名を指定する
  • 指定した行名が存在しない場合は変化なし
  • 複数変更する場合は、{ }の中にカンマで区切って記述する

import pandas as pd

listA = ['AAA', 'BBB', 'CCC', 'DDD']
listB = ['EEE', 'FFF', 'GGG', 'HHH']
listC = ['III', 'JJJ', 'KKK', 'LLL']
listD = ['MMM', 'NNN', 'OOO', 'PPP']

lists = [listA, listB, listC, listD]
df = pd.DataFrame(lists)

df.index=['行名1', '行名2', '行名3', '行名4']


#行名2をindex2に変更し、別の変数df1に格納
df1 = df.rename( index={'行名2':'index2'} )

print( df1 )

#出力
          0    1    2    3
行名1     AAA  BBB  CCC  DDD
index2  EEE  FFF  GGG  HHH
行名3     III  JJJ  KKK  LLL
行名4     MMM  NNN  OOO  PPP

行名と列名を同時に変更する方法

行名と列名を同時に変更するには以下の方法があります。

行名と列名を同時に変更する方法
  1. 表作成時に指定する
  2. 既存の表データの列名を変更する
    1. indexメソッドとcolumnsメソッド
    2. renameメソッド

表作成時に指定する方法

表作成時に行名と列名を変更するには、DataFrameのオプションでcolumnsとindexを同時に指定します。

pd.DataFrame(配列, columns=['列名1','列名2',,,,], index=['行名1','行名2',,,,])
注意点

行列の数と columns, indexで指定した要素の数が一致している必要があります。
多かったり、少ないとエラーになります。

import pandas as pd

listA = ['AAA', 'BBB', 'CCC', 'DDD']
listB = ['EEE', 'FFF', 'GGG', 'HHH']
listC = ['III', 'JJJ', 'KKK', 'LLL']
listD = ['MMM', 'NNN', 'OOO', 'PPP']

lists = [listA, listB, listC, listD]
df = pd.DataFrame(lists, columns=[ '列名1', '列名2', '列名3', '列名4' ], index=[ '行名1', '行名2', '行名3', '行名4' ])


print( df )

#出力
     列名1  列名2  列名3  列名4
行名1  AAA  BBB  CCC  DDD
行名2  EEE  FFF  GGG  HHH
行名3  III  JJJ  KKK  LLL
行名4  MMM  NNN  OOO  PPP

既存の表データの列名を変更する

既存の表データの列名を変更する方法にはindexメソッドとcolumnsメソッドを使う方法と、renameメソッドを使う方法があります。

columnsメソッドとindexメソッドは行列名をまとめて変更する場合につかいます。renameメソッドは特定の行列を指定して変更することができます。

また、columnsメソッドとindexメソッドは元の表のデータが変わる破壊的処理です。renameメソッドは元の表のデータは変化せず、新たに変更した表を作成する非破壊処理です。

columnsメソッドとindexメソッド

df.columns=[ '列名1', '列名2', '列名3', '列名4' ]
df.index=[ '行名1', '行名2', '行名3', '行名4' ]
import pandas as pd

listA = ['AAA', 'BBB', 'CCC', 'DDD']
listB = ['EEE', 'FFF', 'GGG', 'HHH']
listC = ['III', 'JJJ', 'KKK', 'LLL']
listD = ['MMM', 'NNN', 'OOO', 'PPP']

lists = [listA, listB, listC, listD]
df = pd.DataFrame(lists)

df.columns=[ '列名1', '列名2', '列名3', '列名4' ]
df.index=[ '行名1', '行名2', '行名3', '行名4' ]


print( df )

#出力
     列名1  列名2  列名3  列名4
行名1  AAA  BBB  CCC  DDD
行名2  EEE  FFF  GGG  HHH
行名3  III  JJJ  KKK  LLL
行名4  MMM  NNN  OOO  PPP

renameメソッド

renameメソッドは非破壊で列名を変更できるメソッドです。元の表をコピーして、コピーした表のデータを変更するので、元の表はそのまま残ります。

df1 = df.rename(columns={'元の列名':'変更後の列名'}, index={'元の行名':'変更後の行名'})
  • df1 : 行列名変更後の表データを格納する変数名(名前は任意)
  • df:表データ
  • .rename:dfオブジェクトに対してrenameメソッドを実行
renameメソッド利用時の注意点
  • 元の表は変更されない(※非破壊処理)
    • 変更後の表を別の変数に格納する必要がある
  • columnsは変更したい元の列名を指定する
  • 指定した列名が存在しない場合は変化なし
  • 複数変更する場合は、{ }の中にカンマで区切って記述する

import pandas as pd

listA = ['AAA', 'BBB', 'CCC', 'DDD']
listB = ['EEE', 'FFF', 'GGG', 'HHH']
listC = ['III', 'JJJ', 'KKK', 'LLL']
listD = ['MMM', 'NNN', 'OOO', 'PPP']

lists = [listA, listB, listC, listD]
df = pd.DataFrame(lists, columns=[ '列名1', '列名2', '列名3', '列名4' ], index=[ '行名1', '行名2', '行名3', '行名4' ])


#特定の行列名を変更
df1 = df.rename( columns={'列名2':'column2'}, index={'行名1':'index1', '行名3':'index3'} )

print( df1 )

#出力
        列名1 column2  列名3  列名4
index1  AAA     BBB  CCC  DDD
行名2     EEE     FFF  GGG  HHH
index3  III     JJJ  KKK  LLL
行名4     MMM     NNN  OOO  PPP

参考リンク

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