熊猫数据框按日期排序

aja*_*000 6 python sorting datetime pandas

我通过导入一个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())
Run Code Online (Sandbox Code Playgroud)

结果如下:

         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
Run Code Online (Sandbox Code Playgroud)

该日期实际上可以追溯到1999年,因此,如果按日期对日期进行排序,它应该以升序显示数据吗?

Mar*_*erc 10

只是扩展 MaxU 的正确答案:您使用了正确的方法,但是,就像许多其他 Pandas 方法一样,您必须“重新创建”数据框以使所需的更改生效。正如 MaxU 已经建议的那样,这是通过再次键入变量来实现的(将所用方法的输出“存储”到同一变量中),例如:

df = df.sort_index()

或者通过利用属性的力量inplace=True,它将替换变量的内容而无需重新声明它。

df.sort_index(inplace=True)

但是,根据我的经验,我经常觉得使用第一个选项“更安全”。它看起来也更清晰、更规范,因为并非所有方法都提供这种inplace用法。但我都归结为脚本风格,我想......


Ish*_*tri 8

数据看起来像这样

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
Run Code Online (Sandbox Code Playgroud)

使用pandas读取数据

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
Run Code Online (Sandbox Code Playgroud)