【问题标题】:Sorting a Pandas Dataframe by Date and Hour按日期和时间对 Pandas 数据框进行排序
【发布时间】:2021-04-05 12:22:32
【问题描述】:

我已经看到了一些像我一样重复的问题,但没有一个答案能帮助我。 我在按日期时间排序此数据帧时遇到问题(“日期”列格式为 yyyymmdd):

Code Date Hour
4 20100301 15:01:04
3 20100202 09:15:59
2 20090401 15:25:27
1 20100202 09:14:16

这来自客户的数据库,我知道这不是迄今为止存储数据的最佳方式,但我对此无能为力,因此我使用以下代码“修复”它:

df['Date'] = df['Date'].astype(str)
df['Hour']= df['Date'].str[6:8]  + '/' + df['Date'].str[4:6] + '/' + df['Date'].str[0:4] + ' ' + df['Hour']
pd.to_datetime(df['Date'])

所以数据框看起来像这样(我知道在使用后删除“日期”表会更好,但我有充分的理由不这样做):

Code Date Hour
4 20100301 01/03/2010 15:01:04
3 20100202 02/02/2010 09:15:59
2 20090401 01/04/2009 15:25:27
1 20100202 02/02/2010 09:14:16

我已经(单独)尝试了以下代码对其进行排序,但似乎没有一个有效:

df = df.sort_values(['Hour'], ascending=True)
df = df.sort_values(by =['Hour'], ascending=True)
df = df.sort_values(['Hour'])
df.sort_values('Hour', inplace=True)

但所有这些都将我的 df 排序为:

Code Date Hour
4 20100301 01/03/2010 15:01:04
2 20090401 01/04/2009 15:25:27
1 20100202 02/02/2010 09:14:16
3 20100202 02/02/2010 09:15:59

有谁知道为什么我的排序不起作用?也许是因为日期时间转换?我什至无法检测到用于对我的数据框进行排序的模式 pandas。 此数据框中还有更多数据,如有必要,我很乐意在我的帖子中编辑更多数据。

【问题讨论】:

  • 您的示例看起来在 Hour 列中按升序正确排序。它应该是什么样子?此外,看起来 Hour 不是日期时间。
  • 是的,你是对的,首先将其转换为 pandas 日期时间格式,然后对其进行排序。只需做df['Hour']=pd.to_datetime(df['Hour'],format='%m/%d/%Y %H:%M:%S') 然后在此列上进行排序
  • 不,我的意思是修改后的hour 列,即您同时拥有日期和时间的列。 pd.to_datetime 也支持日期和时间。
  • 非常感谢你们! @LazyCoder 的建议对我有用。我猜这是因为默认的 pandas 格式与我的数据不匹配,对吧?
  • @thiagopleasehelp 是的

标签: python pandas dataframe sorting datetime


【解决方案1】:

必须转换为时间而不是日期的是小时。

pd.to_datetime (df ['Hour'])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-04
    • 1970-01-01
    • 2021-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多