python - 具有多个日期范围的 Pandas.DataFrame 切片

标签 python datetime pandas dataframe

我有一个包含 100,000 多行的日期时间索引数据框对象。我想知道是否有一种方便的方法使用 pandas 来获取多个日期范围内的此数据框的子集。

例如,假设我们有两个日期范围:

(datetime.datetime(2016,6,27,0,0,0), datetime.datetime(2016,6,27,5,0,0)

(datetime.datetime(2016,6,27,15,0,0), datetime.datetime(2016,6,27,23,59,59)

假设我们想要获取第一个日期范围或第二个日期范围内的数据框对象的所有行,其中数据框对象从 2016-06-27 00 开始每秒都有行: 00:002016-06-27 23:59:59。 pandas 有没有简单的方法来做到这一点?

最佳答案

two main ways按日期对具有 DatetimeIndex 的 DataFrame 进行切片。

  • 按切片:df.loc[start:end]。如果有多个日期范围,单个 切片可以用 pd.concat 连接起来。

  • 通过 bool 选择掩码:df.loc[mask]


使用 pd.concat 和切片:

import numpy as np
import pandas as pd
np.random.seed(2016)

N = 10**2
df = pd.DataFrame(np.random.randint(10, size=(N, 2)), 
                  index=pd.date_range('2016-6-27', periods=N, freq='45T'))

result = pd.concat([df.loc['2016-6-27':'2016-6-27 5:00'],
                    df.loc['2016-6-27 15:00':'2016-6-27 23:59:59']])

产量

                     0  1
2016-06-27 00:00:00  0  2
2016-06-27 00:45:00  5  5
2016-06-27 01:30:00  9  6
2016-06-27 02:15:00  8  4
2016-06-27 03:00:00  5  0
2016-06-27 03:45:00  4  8
2016-06-27 04:30:00  7  0
2016-06-27 15:00:00  2  5
2016-06-27 15:45:00  6  7
2016-06-27 16:30:00  6  8
2016-06-27 17:15:00  5  1
2016-06-27 18:00:00  2  9
2016-06-27 18:45:00  9  1
2016-06-27 19:30:00  9  7
2016-06-27 20:15:00  3  6
2016-06-27 21:00:00  3  5
2016-06-27 21:45:00  0  8
2016-06-27 22:30:00  5  6
2016-06-27 23:15:00  0  8

请注意,与 Python 中使用的大多数切片语法不同,

df.loc['2016-6-27':'2016-6-27 5:00']

两端都包含在内——切片定义了一个闭区间,不是 半开区间。


使用 bool 选择掩码:

mask = (((df.index >= '2016-6-27') & (df.index <= '2016-6-27 5:00')) 
        | ((df.index >= '2016-6-27 15:00') & (df.index < '2016-6-28')))
result2 = df.loc[mask]
assert result.equals(result2)

关于python - 具有多个日期范围的 Pandas.DataFrame 切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38266461/

相关文章:

python - 如何在 psycopg2 中使用字典中的元组作为命名参数

python - 通过 pandas io SQL 加载表到 Oracle

python - 在绘制/绘制有序分类系列时保留类别顺序

python - Django:model.objects.create() 更改了之前的 model.objects.filter() 的结果集

python - 对内部级别的多索引列进行操作

java - 将 ISO 日期字符串转换为时间戳

php - 按每个项目获取最近的日期值组

python - 如何有效地计算 Pandas 时间序列中的滚动唯一计数?

php - 退出 HTML 页面时停止在 PHP 文件中调用的 Python 脚本

c# - 在 C# 中格式化日期