gpt4 book ai didi

python - Pandas Dataframe 对 ms 值重新采样

转载 作者:太空宇宙 更新时间:2023-11-03 14:26:28 24 4
gpt4 key购买 nike

我有一个具有以下格式的文件:

SET, 0, 0, 0, 6938987, 0, 4
SET, 1, 1, 6938997, 128, 0, 0
SET, 2, 4, 6938998, 145, 0, 2
SET, 0, 9, 6938998, 147, 0, 0
SET, 1, 11, 6938998, 149, 0, 0
....
SET, 1, 30, 6946103, 6, 0, 0
SET, 2, 30, 6946104, 6, 0, 2
GET, 0, 30, 6946104, 8, 0, 0
SET, 1, 30, 6946105, 8, 0, 0
GET, 2, 30, 6946106, 7, 0, 0

第五列代表我从系统测量的 ms(从 Java 的 System.nanoTime() 转换而来)。因此,这些不代表任何日期/时间格式。我想以 5 秒的间隔进行聚合,例如从第一个 6938987 到 6943987:获取 SET/GET 的值计数,获取平均值、标准差等。

我尝试以各种方式使用 data.resample 但继续获取以下错误:

data = pd.read_csv('data2.log', sep=", ", header=None)
data.columns = ["command", "server", "lenQueue", "inQueue", "diffQueue", "diffParse", "diffProcess"]
r = data.resample("5ms", on='inQueue')

TypeError: Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex, but got an instance of 'Int64Index'

是否有任何方法可以使用值差异而不是时间序列进行重新采样?

编辑 - JohnE 建议的解决方案:

将毫秒转换为时间增量,然后重新采样为 5 毫秒:

data['td'] = pd.to_timedelta(data['inQueue'], 'ms')
data['sum'] = data.set_index(data['td'])['lenQueue'].resample('5ms').sum()

[Other columns ommitted]
td sum
0 00:00:00 NaN
1 01:55:38.997000 NaN
2 01:55:38.998000 NaN
3 01:55:38.998000 NaN
4 01:55:38.998000 NaN
5 01:55:38.998000 NaN
6 01:55:38.999000 NaN

是否是因为还有其他列必须也对其进行了一些聚合?如果是这样,我怎样才能多次执行?

最佳答案

错误消息告诉您需要转换为类似日期时间的格式,因此您需要这样做!

一个相当简单的方法是转换为时间增量而不是时间戳,您可以按如下方式执行。首先,让我们使用更简单的数据版本:

In [143]: df
Out[143]:
val ms
0 11 6938987
1 22 6938997
2 33 6938998

然后创建一个新列“td”,表示以毫秒为单位的时间增量“ms”。 (如果您想要微秒,请使用“us”代替):

In [144]: df['td'] = pd.to_timedelta( df['ms'],'ms')

In [145]: df
Out[145]:
val ms td
0 11 6938987 01:55:38.987000
1 22 6938997 01:55:38.997000
2 33 6938998 01:55:38.998000

然后您就可以轻松使用重新采样了。请注意,您需要在重新采样之后进行一些操作(例如求和、最大值、平均值等)。在这里我将使用总和:

In [146]: df.set_index(df['td'])['val'].resample('5ms').sum()
Out[146]:
td
01:55:38.987000 11.0
01:55:38.992000 NaN
01:55:38.997000 55.0
Freq: 5L, Name: val, dtype: float64

关于python - Pandas Dataframe 对 ms 值重新采样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47611811/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com