为了账号安全,请及时绑定邮箱和手机立即绑定

Python Pandas 根据时间从列中选择值

Python Pandas 根据时间从列中选择值

有只小跳蛙 2024-01-15 17:21:07
我是 Python 和 ML 的新手,我正在尝试使用 csv 文件并创建一个模型来预测主机响应的持续时间。我所做的第一件事是使用 Pandas 解析 csv 文件中的日志,现在我有 csv 文件,其中的列按以下顺序排列并附有示例:                               _time             host  duration202     2020-09-26T10:56:33.630+0200           malcon       850203     2020-09-26T10:56:33.630+0200          malcon2       878703     2020-09-25T21:26:04.651+0200           malcon       973我想做的第一件事是使用一些模型进行异常检测,但也许有一种更简单的方法来完成我想要的事情。我希望按时间戳获取每 3 分钟间隔高于 800 的持续时间值,并根据我一周内的数据预测这些值。我从代码开始,该代码会发现持续时间值高于或等于 800,但不知道如何将它们与时间关联并定义间隔。到目前为止我的代码是:import pandas as pddata = pd.read_csv("example_all.csv")df = pd.DataFrame(data,columns=['_time','host','duration'])high = (df.loc[df['duration'] >= 800])print(high) 任何提示和建议将不胜感激!谢谢!更新:我正在尝试使用滚动功能,但我认为我没有正确理解它,并且我有点迷失其中。正如此处所建议的,我使用 to_datetime 函数转换时间戳并按时间对数据进行排序。不幸的是,我找不到一种方法来指定持续时间高于 800 的 3 分钟时间间隔。我的代码现在看起来像这样:import pandas as pddata = pd.read_csv("example_all.csv")data["_time"] = pd.to_datetime(data["_time"], utc='true')df = pd.DataFrame(data,columns=['_time','host','duration'])df.sort_values('_time')high = (df.loc[df['duration'] >= 800])print(high)输出:                                  _time             host  duration202    2020-09-26 08:56:33.630000+00:00           malcon       850203    2020-09-26 08:56:33.630000+00:00          malcon2       850702    2020-09-25 19:26:05.573000+00:00           malcon       878703    2020-09-25 19:26:04.651000+00:00           malcon       973704    2020-09-25 19:26:03.667000+00:00           malcon       993...
查看完整描述

1 回答

?
开心每一天1111

TA贡献1836条经验 获得超13个赞

如果您要查找任何 >= 800 的值,并且在前 3 分钟内未记录任何 < 800 的值,则此方法将起作用:


import pandas as pd

from pandas.tseries.offsets import Minute


data = pd.read_csv("example_all.csv", parse_dates=[0])


data = data.sort_values('_time')



def all_over_800(values):

    return values.map(lambda x: x >= 800).all()



data['over_threshold'] = data[['_time', 'duration']].rolling(

    Minute(3), on='_time').apply(lambda win: all_over_800(win))['duration']


请注意,center窗口选项未针对日期时间偏移窗口实现,因此检查前 3 分钟(或根据顺序后的 3 分钟)是此方法的唯一选项。如果您不介意对数据帧进行两次排序,则可以结合前面和后面的结果来检查样本的两侧。


查看完整回答
反对 回复 2024-01-15
  • 1 回答
  • 0 关注
  • 33 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信