pandasでソートするには

pythonでよく使われる数値計算用のライブラリでpandasがありますが、CSVの読み込みもできてすごく便利です。
しかし、データをソートしたり、ソートしたデータをどう使うかの説明がなく、方法にたどり着くまでに時間がかかったので忘備録として残しておきます。

まず、pandasの使い方について、こちらのサイトの説明が非常にわかりやすかったと思いました。
Pythonでpandasを使う
またく使ったことがない場合はまずこちらを一読することをお勧めします。

環境

python3.5
pandas
データはCSVで読み込むとして、下記のようなデータ
Date,val1,val2
2017-01-03,2,3
2017-01-02,5,2
2017-01-01,3,9

コード

読み込みはこんな感じ

import pandas as pd
csv = pd.read_csv("hoge.csv")
data = csv[['Date','val1','val2']]
print(data)

出力
Date val1 val2
1 2017-01-03 2 3
2 2017-01-02 5 2
3 2017-01-01 3 9

これを日付昇順にしたい場合は

csv = pd.read_csv("hoge.csv").sort_values(['Date'])

とすると

出力
Date val1 val2
3 2017-01-01 3 9
2 2017-01-02 5 2
1 2017-01-03 2 3

と、格納順が変わります。
通常はこれでよいのですが、何等かのライブラリに渡したときに、インデックス番号に従ってデータを取り出してしまうと意味がなくなってしまいますので、インデックス番号の降りなおしが必要です。

csv = pd.read_csv("hoge.csv").sort_values(['Date']).reset_index(drop=True)

出力
Date val1 val2
1 2017-01-01 3 9
2 2017-01-02 5 2
3 2017-01-03 2 3

なお、drop=TrueをFalseにすると古いインデックス番号が追加されます

index Date val1 val2
1 3 2017-01-01 3 9
2 2 2017-01-02 5 2
3 1 2017-01-03 2 3

sortまではすぐにわかったのですが、インデックス番号が変わってないことになかなか気が付かずにはまってしまいました。

スポンサーリンク
タイトルとURLをコピーしました