numpy.where与pandas数据帧无法正常工作

时间:2018-01-05 12:42:14

标签: python pandas numpy jupyter-notebook

我正在尝试将包含日志数据的大型日志数据集与 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)]

如果我在部件数据中检查第一个日志条目,则如下所示:

  1. 00:00:00。
  2. 0时43分23秒。
  3. 1时12分59秒。
  4. 1时53分55秒。
  5. 2点23分52秒。
  6. ....
  7. 我期望输出如下所示:

    1. 00:00:00
    2. 01:00:01
    3. 02:00:00
    4. 三时00分00秒
    5. 4点00分01秒
    6. ....
    7. 虽然我已经使用另一种方式实现了它,但这是一种解决方法,并且我没有像这样丢失了一些功能。

      有人可以弄清楚这种做法到底出了什么问题吗?

      注意:我正在使用python笔记本和pandas,numpy。

1 个答案:

答案 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"])