web-dev-qa-db-ja.com

pandas dataframe sort by date

Csvファイルをインポートしてデータフレームを作成しました。そして、date列をdatetimeに変換し、それをインデックスにしました。しかし、インデックスを並べ替えると、望んだ結果が得られません

print(df.head())
df['Date'] = pd.to_datetime(df['Date'])
df.index = df['Date']
del df['Date']
df.sort_index()
print(df.head())

結果は次のとおりです。

         Date     Last
0  2016-12-30  1.05550
1  2016-12-29  1.05275
2  2016-12-28  1.04610
3  2016-12-27  1.05015
4  2016-12-23  1.05005
               Last
Date               
2016-12-30  1.05550
2016-12-29  1.05275
2016-12-28  1.04610
2016-12-27  1.05015
2016-12-23  1.05005

日付は実際には1999年に遡るので、これを日付でソートすると、データが昇順で表示されるはずです。

8
ajax2000

MaxUの正解を拡張するだけです。正しい方法を使用しましたが、他の多くのpandasメソッドと同様に、目的の変更を有効にするためにデータフレームを「再作成」する必要があります。 MaxUはすでに提案されています。これは、変数を再度入力することによって実現されます(使用されたメソッドの出力を同じ変数に「保存」するため)。次に例を示します。

df = df.sort_index()

あるいは、属性_inplace=True_の力を利用することで、変数を再宣言する必要なく、変数の内容を置き換えます。

df.sort_index(inplace=True)

ただし、私の経験では、最初のオプションを使用すると「安全」に感じることがよくあります。また、すべてのメソッドがinplaceの使用法を提供しているわけではないため、より明確で正規化されたように見えます。しかし、私はすべて私が推測するスクリプトスタイルに行き着きます...

3
Marjan Moderc

データはこのようになります

Date,Last
2016-12-30,1.05550
2016-12-29,1.05275
2016-12-28,1.04610
2016-12-27,1.05015
2016-12-23,1.05005

パンダを使用してデータを読み取る

import pandas as pd
df = pd.read_csv('data',sep=',')
# Displays the data head
print (df.head())
         Date     Last
0  2016-12-30  1.05550
1  2016-12-29  1.05275
2  2016-12-28  1.04610
3  2016-12-27  1.05015
4  2016-12-23  1.05005

# Sort column with name Date
df = df.sort_values(by = 'Date')
         Date     Last
4  2016-12-23  1.05005
3  2016-12-27  1.05015
2  2016-12-28  1.04610
1  2016-12-29  1.05275
0  2016-12-30  1.05550

# reset the index
df.reset_index(inplace=True)

# Display the data head after index reset
       index        Date     Last
0      4  2016-12-23  1.05005
1      3  2016-12-27  1.05015
2      2  2016-12-28  1.04610
3      1  2016-12-29  1.05275
4      0  2016-12-30  1.05550

# delete the index
del df['index']

# Display the data head
print (df.head())
         Date     Last
0  2016-12-23  1.05005
1  2016-12-27  1.05015
2  2016-12-28  1.04610
3  2016-12-29  1.05275
4  2016-12-30  1.05550
2
Ishan Khatri