11
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Pandas.DataFrameの列順を任意に並び替える

Last updated at Posted at 2020-03-02

はじめに

PandasのDataFrameに列を追加すると末尾に追加されていくが、ファイル出力する際にDataFrameの列順を指定したい時がある。
DataFrameの並び替えと言えばsort_values()やsort_index()だが、どちらも行方向の並び替えで列方向の並び替えには対応していない。
頻繁に使う訳ではないが、忘れた頃に使いたくなるので備忘録として残しておく。

方法

Pandasのlocの引数に並び替えた列名をリストを渡すだけ。
pandas.DataFrame.loc

indexでも同様に任意の順に適応可能。

データ準備

from sklearn.datasets import load_iris
import pandas as pd

# サンプルとしてirisデータを利用
iris = load_iris()
df_iris = pd.DataFrame(iris.data, columns=iris.feature_names)

# 各項目の平均値を求め、サフィックスで列名に"_mean"を付ける
for col in df_iris.columns:
    df_iris[col + "_mean"] = df_iris[col].mean()

df_iris.head()

iris_01.png

並び替えの指定

# 任意の列順となるリストを作成
# ここではDataFrameの列名リストを取得、昇順に並び替えて使用する
list_col_sorted = df_iris.columns.to_list()
list_col_sorted.sort()
list_col_sorted
['petal length (cm)',
 'petal length (cm)_mean',
 'petal width (cm)',
 'petal width (cm)_mean',
 'sepal length (cm)',
 'sepal length (cm)_mean',
 'sepal width (cm)',
 'sepal width (cm)_mean']

結果

# locの引数に並び替えたリストを設定
df_iris.loc[:, list_col_sorted].head()

iris_03.png

おわりに

列名でソートしたことで、末尾が"_mean"の列名が元の列のすぐ後に並ぶようになった。

機械学習では数十以上の項目から数百、数千の特徴量を作成することもある。
他にも欠損値フラグを追加する際など、対応する項目が離れていると見辛いのでそうした場面で覚えておくと良い。

11
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?