DataFrameの行・列の追加【Python】

ここでは、DataFrameへの行・列の追加方法について解説します。なお、DataFrameの結合同士を結合する方法については「DataFrameの結合」の記事をご覧ください。

開発環境

  • pandas 1.2.1
  • Python 3.7.9

サンプルデータ

サンプルデータとして以下のデータを用います。

以下のようにURLを指定して、DataFrameとして取得できます。

df_sample = pd.read_excel('https://biotech-lab.org/wp-content/uploads/2020/03/dataframe-sample-01.xlsx')

DataFrameの行を追加する (appendメソッド)

DataFrameに行を追加するには、appendメソッドを用います。

appendメソッドで追加する項目としては、DataFrame、Series、辞書型が指定可能です。

DataFrameに別のDataFrameの行を追加する

以下の例ではサンプルデータにDataFrameで行を追加します。

import pandas as pd

df_sample = pd.read_excel('https://biotech-lab.org/wp-content/uploads/2020/03/dataframe-sample-01.xlsx')
df = pd.DataFrame([['鈴木次郎', '男', 23, '学生'], 
                    ['渡辺秋子', '女', 33, '看護師']],
                    columns=['名前', '性別', '年齢', '職業'])
df_new = df_sample.append(df)
print(df_new)
     名前 性別  年齢   職業
0  田中一郎  男  50  会社員
1  佐藤花子  女  45  弁護士
2  高橋太郎  男  30   医師
3   橋本清  男  41  自営業
0  鈴木次郎  男  23   学生
1  渡辺秋子  女  33  看護師

今の例ではignore_indexはデフォルトのままFalseだったので、元のDataFrameの行番号がそのまま継承されています。しかし、これでは行番号が重複してしまっているので、ignore_indexをTrueにしてみます。

import pandas as pd

df_sample = pd.read_excel('https://biotech-lab.org/wp-content/uploads/2020/03/dataframe-sample-01.xlsx')
df = pd.DataFrame([['鈴木次郎', '男', 23, '学生'], 
                    ['渡辺秋子', '女', 33, '看護師']],
                    columns=['名前', '性別', '年齢', '職業'])
df_new = df_sample.append(df, ignore_index=True)
print(df_new)
     名前 性別  年齢   職業
0  田中一郎  男  50  会社員
1  佐藤花子  女  45  弁護士
2  高橋太郎  男  30   医師
3   橋本清  男  41  自営業
4  鈴木次郎  男  23   学生
5  渡辺秋子  女  33  看護師

これで新たな行番号を振りなおすことができました。

なお、元のDataFrameと新たに追加するDataFrameとで列ラベルが一致しない場合は、次のよう新たな列ラベルが生成されてしまいます。

import pandas as pd

df_sample = pd.read_excel('https://biotech-lab.org/wp-content/uploads/2020/03/dataframe-sample-01.xlsx')
df = pd.DataFrame([['鈴木次郎', '男', 23, '学生'], 
                    ['渡辺秋子', '女', 33, '看護師']])
df_new = df_sample.append(df)
print(df_new)
      0        1     2      3     名前    年齢   性別   職業
0   NaN      NaN   NaN    NaN  田中一郎  50.0    男  会社員
1   NaN      NaN   NaN    NaN  佐藤花子  45.0    女  弁護士
2   NaN      NaN   NaN    NaN  高橋太郎  30.0    男   医師
3   NaN      NaN   NaN    NaN   橋本清   41.0    男  自営業
0  鈴木次郎    男   23.0   学生    NaN    NaN   NaN    NaN
1  渡辺秋子    女   33.0  看護師   NaN    NaN   NaN    NaN

DataFrameにSeries / 辞書で行を追加する

Seriesで行を追加する場合は次のようにします。

import pandas as pd

df_sample = pd.read_excel('https://biotech-lab.org/wp-content/uploads/2020/03/dataframe-sample-01.xlsx')
data = pd.Series({'名前' : '鈴木次郎', '性別' : '男', '年齢' : 23, '職業' : '学生'})
df_new = df_sample.append(data, ignore_index=True)

辞書で行を追加する場合は次のようにします。

import pandas as pd

df_sample = pd.read_excel('https://biotech-lab.org/wp-content/uploads/2020/03/dataframe-sample-01.xlsx')
data = {'名前' : '鈴木次郎', '性別' : '男', '年齢' : 23, '職業' : '学生'}
df_new = df_sample.append(data, ignore_index=True)

DataFrameにリストで行を追加する

appendメソッドで追加できる要素は「DataFrame、Series、辞書型」が基本ですが、リストで行を追加することもできるようです。この場合は次のサンプルのようにリストを入れ子にした2重のリストにする必要があります。

import pandas as pd

df_sample = pd.DataFrame([['鈴木次郎', '男', 23, '学生'], 
                    ['渡辺秋子', '女', 33, '看護師']])

data = ['高梨五郎', '男', 42, '会社役員']
df_new = df_sample.append([data], ignore_index=True)
print(df_new)
      0  1   2     3
0  鈴木次郎  男  23    学生
1  渡辺秋子  女  33   看護師
2  高梨五郎  男  42  会社役員

この場合はappendメソッドで指定するリストの列ラベルは「0, 1, 2, 3, …」となります。そのため、この例のようにDataFrameの列ラベルを指定していない場合は問題ないのですが、次のようにDataFrameの列ラベルを指定してある場合は新たな列ラベルが作成されてしまいます。

import pandas as pd

df_sample = pd.read_excel('https://biotech-lab.org/wp-content/uploads/2020/03/dataframe-sample-01.xlsx')

data = ['高梨五郎', '男', 42, '会社役員']
df_new = df_sample.append([data], ignore_index=True)
print(df_new)
      0    1     2     3    名前    年齢   性別   職業
0   NaN  NaN   NaN   NaN  田中一郎  50.0    男  会社員
1   NaN  NaN   NaN   NaN  佐藤花子  45.0    女  弁護士
2   NaN  NaN   NaN   NaN  高橋太郎  30.0    男   医師
3   NaN  NaN   NaN   NaN   橋本清  41.0    男  自営業
4  高梨五郎    男  42.0  会社役員   NaN   NaN  NaN  NaN

このようにappendメソッドにリストで行を追加することも可能ですが、想定外の結果になってしまう場合もあるので注意が必要です。

DataFrameの列を追加する

DataFrameに添え字[]で新たな列ラベルを指定し、リストでその項目を指定することで、列を追加することができます。
例えば、「住所」という列を追加してみます。

import pandas as pd

df_sample = pd.read_excel('https://biotech-lab.org/wp-content/uploads/2020/03/dataframe-sample-01.xlsx')
df_sample['住所'] = ['東京都', '埼玉県', '大阪府', '京都府']
print(df_sample)
     名前 性別  年齢   職業   住所
0  田中一郎  男  50  会社員  東京都
1  佐藤花子  女  45  弁護士  埼玉県
2  高橋太郎  男  30   医師  大阪府
3   橋本清  男  41  自営業  京都府

関連記事・スポンサーリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)