【问题标题】:pandas dataframe sort by date熊猫数据框按日期排序
【发布时间】:2017-05-16 23:16:49
【问题描述】:

我通过导入 csv 文件制作了一个数据框。并将日期列转换为日期时间并使其成为索引。但是,在对索引进行排序时,它不会产生我想要的结果

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 年,所以如果我按日期排序,它应该按升序显示数据吧?

【问题讨论】:

  • 执行df.sort_index(inplace=True)df = df.sort_index()
  • 最好使用df.set_index('Date', drop=True) 来更改索引。

标签: python sorting datetime pandas


【解决方案1】:

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

df = df.sort_index()

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

df.sort_index(inplace=True)

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

【讨论】:

    【解决方案2】:

    数据是这样的

    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
    

    使用 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
    

    【讨论】:

    • 您能否添加一个简短的解释?
    猜你喜欢
    • 2021-10-21
    • 1970-01-01
    • 1970-01-01
    • 2021-04-04
    • 2019-04-10
    • 2018-05-24
    • 2018-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多