当前位置: 首页 > 知识库问答 >
问题:

如何在熊猫系列中获得一个时间范围的行掩码?[重复]

谢叶五
2023-03-14

我有一个< code > pandas < code > data frame ,其日期列名为< code>SDate,我希望找到< code>SDate的时间在下午2点到4点之间的行,类似于:

d=pd.read_csv("data.csv",parse_dates=['SDate'])
indices=np.nonzero(d.SDate.hour>=2&d.SDate.hour<=4)[0]

但这不是那样工作的。如何以最熊猫和蟒蛇的方式做到这一点?

共有3个答案

索锐藻
2023-03-14

您需要用括号分隔条件:

s = pd.to_datetime(['2018-01-01 02:00', '2015-12-25 15:00'])

indices = np.nonzero(s.hour>=2 & s.hour<=4)[0]
# TypeError: unsupported operand type(s) for &: 'int' and 'Int64Index'

indices = np.nonzero((s.hour>=2) & (s.hour<=4))[0]
# array([0], dtype=int64)

请注意,您可以使用pd.Series.argmax进行此计算,因为标量输出就足够了:

indices = ((s.hour>=2) & (s.hour<=4)).argmax()
# 0
楚嘉纳
2023-03-14

也可以使用between_time

d = d.set_index('SDate')
d.between_time(start_time = '14:00', end_time = '16:00')
夏侯玄天
2023-03-14

如果你想要一个面具,这应该做到:

import pandas as pd

df = pd.DataFrame(data=pd.date_range(start='1/1/2018', end='1/2/2018', freq='H'), columns=['SDate'])
mask = (df.SDate.dt.hour >= 2) & (df.SDate.dt.hour <= 4)
print(mask.values)

输出

[False False  True  True  True False False False False False False False
 False False False False False False False False False False False False
 False]

在上面的示例中,df是具有日期时间dtype列< code>SDate的DataFrame,dt是datetimelike属性(如hour)的访问器对象。

 类似资料:
  • 问题内容: 如何获得系列中最常出现的物品? 考虑系列 返回值应该是 问题答案: 您可以使用并提取第一个值: 这不一定是低效率的。与往常一样,对您的数据进行测试以查看适合的数据。

  • 我如何获得所有列没有一个特定的? 示例:如果我有一个包含n列的dataframe、、...,如何获得没有的所有列?

  • 问题内容: 我有一个包含布尔值的pandas对象。如何获得包含每个值逻辑的序列? 例如,考虑一个包含以下内容的系列: 我想要获得的系列将包含: 这似乎应该相当简单,但显然我放错了我的mojo =( 问题答案: 要反转布尔系列,请使用: 使用Python2.7,NumPy 1.8.0,Pandas 0.13.1: 从Pandas 0.13.0开始,Series不再是;的子类。它们现在是的子类。这可能

  • 我有一个包含布尔值的pandas对象。如何获得包含每个值的逻辑

  • 获取相应列内容满足条件的索引范围的最有效方法是什么。。类似于以标记开始并以“body”标记结束的行。 例如,数据框如下所示 我要得到行索引1-3 有人能提出最具蟒蛇风格的方法来实现这一点吗?

  • 我有一个数据框,如下所示,带有网站名称和每个网站的日期范围。 我希望找到每个站点的开始和结束日期,并按如下方式布置数据框架: 我知道我可以找到整个范围的最小值和最大值,如下所示: 只是不确定最好的方法是将它分别应用于每个站点。