首页 > 解决方案 > 按时间戳对行进行排序

问题描述

我知道这应该很容易,但由于某种原因它不起作用。我有一个csv文件如下:

message,name,userID,period,@timestamp,event_count
"Successful Logon for user "" user""",Logon Attempt,user,period_1,2021-05-11 09:52:30,1
"Successful Logon for user "" user""",Logon Attempt,user,period_1,2021-05-10 06:04:24,1

我正在尝试根据时间戳对行进行排序。

首先认为我所做的是将其转换@timestamp为如下日期格式并对值进行排序

f['@timestamp'] = pd.to_datetime(f['@timestamp'], format="%Y-%m-%d %H:%M:%S").sort_values()

但是当我运行脚本时,结果仍然没有根据时间戳按任何顺序排序

关于我做错了什么的任何建议?对不起,我还是熊猫的新手

编辑:

甚至使用:

f['@timestamp'] = pd.to_datetime(f['@timestamp'], format="%Y-%m-%d %H:%M:%S")
f = f.sort_values(by='@timestamp')

输出始终相同。值未排序。

使用更新后的脚本,是我运行脚本,输出还是如下:

message,name,userID,period,@timestamp,event_count
"Successful Logon for user "" user""",Logon Attempt,user,period_1,2021-05-11 09:52:30,1
"Successful Logon for user "" user""",Logon Attempt,user,period_1,2021-05-10 06:04:24,1

标签: pandasdataframe

解决方案


是否对 的输出进行排序或打乱都没有关系pd.to_datetime(…),一旦分配给您的列以匹配索引,它将重新排序。

首先分配给列,然后排序:

df['timestamp'] = pd.to_datetime(…)
df = df.sort_values(by='timestamp')

例子

让我们从一个未排序的数据框开始

>>> df = pd.DataFrame({'date': ['2021-07-29', '2000-01-01', '2020-02-01']})
>>> df
         date
0  2021-07-29
1  2000-01-01
2  2020-02-01

应用日期时间并排序:

>>> df['date'] = pd.to_datetime(df['date'])
>>> df = df.sort_values(by='date')
        date
1 2000-01-01
2 2020-02-01
0 2021-07-29

它适用于您的数据集:

df['@timestamp'] = pd.to_datetime(df['@timestamp'])
df = df.sort_values(by='@timestamp')
df
                             message           name userID    period          @timestamp  event_count
1  Successful Logon for user " user"  Logon Attempt   user  period_1 2021-05-10 06:04:24            1
0  Successful Logon for user " user"  Logon Attempt   user  period_1 2021-05-11 09:52:30            1

推荐阅读