我正在尝试将包含日志数据的大型日志数据集与 StartTime 和 EndTime 以及其他内容进行划分。 我使用np.where来比较pandas dataframe对象,然后将其分为每小时(可能是半小时或每季度)块,取决于 hr 和 timeWindow 价值。
下面,在这里,我试图将整天的日志分成1小时的块,但它不会给我预期的输出。
我的想法就像我的错在哪里!
# Holding very first time in the log data and stripping off
# second, minutes and microseconds.
today = datetime.strptime(log_start_time, "%Y-%m-%d %H:%M:%S.%f").replace(second = 0, minute = 0, microsecond = 0)
today_ts = int(time.mktime(today.timetuple())*1e9)
hr = 1
timeWindow = int(hr*60*60*1e9) #hour*minute*second*restdigits
parts = [df.loc[np.where((df["StartTime"] >= (today_ts + (i)*timeWindow)) & \
(df["StartTime"] < (today_ts + (i+1)*timeWindow)))].dropna(axis= 0, \
how='any') for i in range(0, rngCounter)]
如果我在部件数据中检查第一个日志条目,则如下所示:
我期望输出如下所示:
虽然我已经使用另一种方式实现了它,但这是一种解决方法,并且我没有像这样丢失了一些功能。
有人可以弄清楚这种做法到底出了什么问题吗?
注意:我正在使用python笔记本和pandas,numpy。
答案 0 :(得分:0)
感谢@raganjosh。
我使用pandas Grouper来解决问题。
以下是我的实施。 我已经使用了动态值&#39; hr&#39;。
timeWindow = str(hr)+'H'
# Dividing the log into "n" parts. Depends on timewindow initialisation.
df["ST"] = df['StartTime']
df = df.set_index(['ST'])
# Using the copied column as an index.
df.index = pd.to_datetime(df.index)
# Here the parts contain grouped chunks of data as per timewindow, list[0] = key of the group, list[1] = values.
parts = list(df.groupby(pd.TimeGrouper(freq=timeWindow))['StartTime', "ProcessTime", "EndTime"])