代码之家  ›  专栏  ›  技术社区  ›  LucSpan

在字符串日期上对pandas数据帧进行排序,但不进行转换[重复]

  •  2
  • LucSpan  · 技术社区  · 6 年前

    设立

    我有一个数据框架,其中一个列的日期是字符串。

    日期格式为日/月/年,如2018年5月12日。

    这个 test_df 数据帧看起来,

       date_created
    0    05/12/2018
    1    04/12/2018
    2    04/12/2018
    3    03/12/2018
    4    02/12/2018
    5    30/11/2018
    6    30/11/2018
    7    30/11/2018
    8    30/11/2018
    9    29/11/2018
    10   02/12/2018
    11   29/11/2018
    12   29/11/2018
    

    问题

    我想按日期分类,这样我就

       date_created
    0    05/12/2018    
    1    04/12/2018
    2    04/12/2018
    3    03/12/2018
    10   02/12/2018    
    4    02/12/2018
    5    30/11/2018
    6    30/11/2018
    7    30/11/2018
    8    30/11/2018
    9    29/11/2018
    11   29/11/2018
    12   29/11/2018
    

    但以下 this example ,

    test_df.sort_values(by='date_created', inplace=False, ascending=True)

    给予,

       date_created
    4    02/12/2018
    10   02/12/2018
    3    03/12/2018
    1    04/12/2018
    2    04/12/2018
    0    05/12/2018
    9    29/11/2018
    11   29/11/2018
    12   29/11/2018
    5    30/11/2018
    6    30/11/2018
    7    30/11/2018
    8    30/11/2018
    

    我怎么倒序 在内部 这个月?

    1 回复  |  直到 6 年前
        1
  •  2
  •   jpp    6 年前

    这个 推荐 解决方案是将系列转换为 datetime 然后排序:

    df['date_created'] = pd.to_datetime(df['date_created'], dayfirst=True)
    
    res = df.sort_values('date_created', ascending=False)
    
    print(res)
    
       date_created
    0    2018-12-05
    1    2018-12-04
    2    2018-12-04
    3    2018-12-03
    4    2018-12-02
    10   2018-12-02
    5    2018-11-30
    6    2018-11-30
    7    2018-11-30
    8    2018-11-30
    9    2018-11-29
    11   2018-11-29
    12   2018-11-29
    

    如果你坚持要保持 object DTYPE系列,您可以 然后 在单独的操作中转换回字符串:

    res['date_created'] = res['date_created'].dt.strftime('%d/%m/%Y')