Python pandasで特定の列に複数列挿入する
2020/03/25 categories:Python| tags:Python|pandas|
pandasで特定の列に複数の列を挿入するプログラムを作成しました。
挿入する列の番号をstartとして、データフレームdfをstartで左右にスライスします。スライス後の左側データフレームleftは0~startまでをスライス、右側データフレームrightはstartからdfの列の最後の番号までスライスします。
left = df.iloc[ :, 0:start ]
right = df.iloc[ :, start:df.shape[1] ]
挿入するデータフレームは、元のデータフレームdfのインデックスと新たに追加する列の名前のcolumnsを指定してデータフレームmidを新たに作成します。
mid = pd.DataFrame(index=df.index, columns=columns)
そして最後にconcatでleft、mid、rightを横方向(axis=1)に連結したらデータフレームの特定の列に複数の列が挿入されます。
pd.concat([left, mid, right], axis=1)
関数化
これらを関数化(insert_columns)したテスト用のプログラムは下記の通りです。
import pandas as pd
def insert_columns(df, start, columns):
left = df.iloc[ :, 0:start ]
mid = pd.DataFrame(index=df.index, columns=columns)
right = df.iloc[ :, start:df.shape[1] ]
return pd.concat([left, mid, right], axis=1)
df = pd.DataFrame(
{
'a': ['A1', 'A2', 'A3', 'A4', 'A5', 'A6'],
'b': ['B1', 'B2', 'B3', 'B4', 'B5', 'B6'],
'c': ['C1', 'C2', 'C3', 'C4', 'C5', 'C6'],
'd': ['D1', 'D2', 'D3', 'D4', 'D5', 'D6'],
'e': ['E1', 'E2', 'E3', 'E4', 'E5', 'E6'],
},
index=['one', 'two', 'three', 'four', 'five', 'six']
)
print(df)
inserted = insert_columns(df, 2, ['f', 'g'])
print(inserted)
実行結果
a b c d e
one A1 B1 C1 D1 E1
two A2 B2 C2 D2 E2
three A3 B3 C3 D3 E3
four A4 B4 C4 D4 E4
five A5 B5 C5 D5 E5
six A6 B6 C6 D6 E6
a b f g c d e
one A1 B1 NaN NaN C1 D1 E1
two A2 B2 NaN NaN C2 D2 E2
three A3 B3 NaN NaN C3 D3 E3
four A4 B4 NaN NaN C4 D4 E4
five A5 B5 NaN NaN C5 D5 E5
six A6 B6 NaN NaN C6 D6 E6
列番号2の位置に新たにf、g列を挿入することが出来ました。