【问题标题】:Sorting date values ​in a dataframe doesn't work对数据框中的日期值进行排序不起作用
【发布时间】:2023-03-04 00:06:01
【问题描述】:

我有这种形式的“创建于”列:

日期格式如下:'%d/%m/%Y' -> 日、月、年

obj = {'Created At': ['01/01/2017', '01/02/2017', '02/01/2017', 
                      '02/02/2017', 
                      '03/01/2017', '03/02/2017','04/01/2017' ], 
       'Text': [1, 70,14,17,84,76,32]}

df = pd.DataFrame(data=obj)

我做到了,但没用:

df.sort_values(by='Created At', inplace=True)

似乎它只对日期进行排序而忽略月份。我该怎么办?

【问题讨论】:

  • 不,它确实对它进行了正确排序:只有在两个日期相同的情况下,它才会按月份排序。那是因为您的日期是字符串,并且这些是按字典顺序排序的。

标签: pandas sorting date


【解决方案1】:

它确实对它进行了正确排序:您的日期是 strings 这里。字符串按字典顺序排序。所以这意味着只有当第一个字符相同时,它才会查看第二个字符,等等。

因此,您可能希望先将列转换为日期时间对象:

df['Created At'] = <b>pd.to_datetime(</b>df['Created At']<b>, format='%d/%m/%Y')</b>

然后我们可以对dataframe进行排序,得到:

>>> df.sort_values(by='Created At', inplace=True)
>>> df
  Created At  Text
0 2017-01-01     1
2 2017-01-02    14
4 2017-01-03    84
6 2017-01-04    32
1 2017-02-01    70
3 2017-02-02    17
5 2017-02-03    76

【讨论】:

  • 对不起,但我有一个问题:当你这样做时:format='%d/%m/%Y' 结果是:年、月、日?例如:2017-02-02 2017-02-03
  • @Gizelly:格式指定我们如何将字符串解析datetime对象。因此,一旦解析,日期时间对象就表示为 yyyy-mm-dd。这些不再是字符串,而是日期时间对象。因此,它使日期的计算等更加方便。
  • 哇!谢谢你教我一个新概念!我对词典学一无所知。你帮了我很多!
猜你喜欢
  • 2019-09-07
  • 2011-09-08
  • 2022-09-27
  • 2012-07-19
  • 2020-09-10
  • 2020-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多