Python 指定番目に列を挿入する「pandas」

例えば、0列目(一番左の列)へ挿入する場合の例は下記です。

df.insert(0, '列名', 挿入するデータリスト)

これを活用した雛形コードを残します。例えば、下表のようなcsvファイルがあったとします。

#Name x_min x_max y_min y_max
A 3 4 -1 -1
B 3 4 1 1
C 1 2 10 10
D 1 2 -10 -10

本コードを実行すると、下表のように数値列のみをソート(並び替え)した結果をcsvファイルに保存します。

#Name x_min x_max y_min y_max
A 1 2 -10 -10
B 1 2 10 10
C 3 4 -1 -1
D 3 4 1 1

一発でするのではなく、下図のように順を追って処理します。

f:id:HK29:20200628005212p:plain

■本プログラム

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os
import pandas as pd

def main():
    # csv ファイルをpandasのDataFrame型で抽出
    df = pd.read_csv(file_path, skiprows=0, encoding='utf-8')
    print(df)

    # 指定列を抽出後、pandasのSeries型をリストへ変換
    my_list = df[label_column ].values.tolist()
    print(my_list)

    # 指定列を削除
    df_drop = df.drop(labels=label_column, axis=1)
    print(df_drop)

    # 型を浮動小数点型へ変換
    df_f = df_drop.astype('float64')
    print(df_f)
    
    # 複数列の値で並び替える。ascending=Trueで昇順
    df_s = df_f.sort_values(by=sort_list, ascending=True)
    print(df_s)
    
    # 指定番目に列を挿入(下記例では0列目)
    df_s.insert(0, label_column , my_list)
    
    # 元のインデックスを削除
    df_r = df_s.reset_index(drop=True)
    print(df_r)
    
    # csvファイルで保存する
    df_r.to_csv(output_path, sep=',', index=False, encoding='utf-8', header=True)
    
if __name__ == '__main__':
    path = os.getcwd()       # currenet directry
    input_file = 'data.csv'
    file_path = os.path.join(path, input_file)

    label_column = r'#Name'
    sort_list = ['x_min', 'x_max', 'y_min', 'y_max']
    output_path = 'sorted_data.csv'

    main()
    print('finished')

以上

<広告>