【发布时间】: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