【问题标题】:Slicing pandas.Series at specified time stamps在指定的时间戳对 pandas.Series 进行切片
【发布时间】:2019-06-29 12:38:36
【问题描述】:

我正在尝试以指定的时间戳对 pandas.Series 进行切片。从其他 SO 问题中,我得到了以下工作流程:

import pandas as pd
x = ... # some time data
y = ... # some value data

lower_limit_x = pd.to_datetime(x.index) >= pd.to_datetime('2019-01-23 20:59:04')
upper_limit_x = pd.to_datetime(x.index) <= pd.to_datetime('2019-01-23 21:37:44')

lower_limit_y = pd.to_datetime(y.index) >= pd.to_datetime('2019-01-23 20:59:04')
upper_limit_y = pd.to_datetime(y.index) <= pd.to_datetime('2019-01-23 21:37:44')

mask_x = lower_limit_x & upper_limit_x
mask_y = lower_limit_y & upper_limit_y

sliced_x = x[mask_x]
sliced_y = y[mask_y]

但是,如果我从以下数据集开始,该数据集跨越大约。 2019-01-23 20:45 至 2019-01-23 04:00:

结果数据似乎是空的。如果我这样做了

sliced_y.values

结果为空。

如何成功地按时间戳对数据进行切片?

【问题讨论】:

  • 我无法复制,但您可能希望查看pd.DataFrame.between_time 以通过单个方法调用过滤您的数据帧。
  • 你好@jpp 感谢这个提示!我觉得我的数据现在的格式不正确。例如。所有时间戳都在x 系列中,所有值都在y 系列中。如何将这两个系列合并为一个合适的系列?
  • len(x) == len(y),即你的两个系列有相同的长度吗?
  • 是的,它们确实有相同的长度。

标签: python pandas datetime indexing


【解决方案1】:

您可以创建单个数据框,然后使用loc 访问器:

df = pd.DataFrame(y.values, index=x.values)

sliced_df = df.loc['2019-01-23 20:59:04': '2019-01-23 21:37:44']

sliced_df 现在是单个数据框,您可以按如下方式访问您的 xy 坐标:

sliced_times = sliced_df.index
sliced_values = sliced_df.iloc[:, 0].values

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-05
    • 2014-04-28
    • 2020-04-09
    • 1970-01-01
    • 2015-03-07
    • 1970-01-01
    • 2018-04-11
    相关资源
    最近更新 更多