DataFrameの特定の列の値に基づいて行を並べ替えたいと思ったのですがKeyError:が出て苦労したので、解決したいきさつをメモしておきます。自分の扱ったデータは、カラム(列)が年度、行が人名で、データは数字です。個人個人のとある数値データの年推移をまとめたものです。
解決のきっかけは、このサイトの記事。
- 【Pythonエラー】Pandas Dataframeカラム名指定でKey Error→カラム名確認して原因特定 Qiita @kath_y 2019年07月25日
カラム名に、目に見えない(表示されない)空白文字があったからというものでした。print(df.columns) でカラム名の確認からやっていました。この人の結果は、
Index([‘sepal length (cm)’, ‘sepal width (cm)’, ‘petal length (cm)’, ‘petal width (cm)’], dtype=’object’)
自分も試してみたところ、
Int64Index([2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020], dtype=’int64′, name=’Year’)
となりました。ちなみに、目でみたところはカラム名は、’2011′, ‘2012’, のように文字列だと思っていました。なので、
df.sort_values(by=[‘2012’])
で良いのだろうと思ったのですが、
KeyError: ‘2012’
となって途方に暮れていました。上のチェックでわかったことは、カラム名が文字列としての数字ではなく、本当に数字、つまりインテジャー(整数)だったということ。ならばと思って、
df.sort_values(by=[2012],ascending=False)
と数字をそのまま放りこんだらうまく期待した動作をしてくれました。ascending=False 昇順じゃないよということで降順にする指定方法。2012という名前のカラム(列)の値が降順になるように、行を入れ替えるという動作になります。