Pandas:选择DataFrame日期范围内的行(日期时间索引)

Pandas:选择DataFrame日期范围内的行(日期时间索引)

在本文中,我们将介绍如何使用Pandas在数据帧中选择特定日期范围内的行。这在数据分析和处理中经常使用,因此这个主题是非常有用的。

阅读更多:Pandas 教程

Pandas DatetimeIndex

在Pandas中,DatetimeIndex是一个时间序列的索引,由一系列时间戳组成。通过将一列 pandas.Series 转换为 datetime64 类型,可以创建一个 DatetimeIndex。

import pandas as pd

data = pd.read_csv('data.csv', parse_dates=[0])
data.set_index('date', inplace=True)

print(data.index)

输出:

DatetimeIndex(['2019-10-01', '2019-10-02', '2019-10-03', '2019-10-04',
               '2019-10-05', '2019-10-06', '2019-10-07', '2019-10-08',
               '2019-10-09', '2019-10-10'],
              dtype='datetime64[ns]', name='date', freq=None)

注意:如果不将索引设置为 DatetimeIndex,则无法按日期筛选数据。

Pandas DateRange 和 Timestamp

Pandas 中的 date_range() 函数可用于生成 DatetimeIndex,该函数接受多个参数来定义时间序列的开始和结束日期、频率和时区等。

例如,下面的代码可以生成两个日期之间的每一天:

import pandas as pd

start_date = '2019-01-01'
end_date = '2020-01-01'
date_range = pd.date_range(start=start_date,end=end_date,freq='D')

print(date_range)

输出:

DatetimeIndex(['2019-01-01', '2019-01-02', '2019-01-03', '2019-01-04',
               '2019-01-05', '2019-01-06', '2019-01-07', '2019-01-08',
               '2019-01-09', '2019-01-10',
               ...
               '2019-12-23', '2019-12-24', '2019-12-25', '2019-12-26',
               '2019-12-27', '2019-12-28', '2019-12-29', '2019-12-30',
               '2019-12-31', '2020-01-01'],
              dtype='datetime64[ns]', length=366, freq='D')

另外,单个时间戳可以表示为 pandas.Timestamp 对象。

import pandas as pd

timestamp = pd.Timestamp('2020-01-01')

print(timestamp)

输出:

2020-01-01 00:00:00

Pandas:选择日期范围内的行

一旦有了 DatetimeIndex 索引和 DateRange 或 Timestamp 对象,就可以选择数据帧中特定日期范围内的行。

import pandas as pd

data = pd.read_csv('data.csv', parse_dates=[0])
data.set_index('date', inplace=True)

start_date = '2019-10-03'
end_date = '2019-10-06'

data_filtered = data.loc[start_date:end_date]

print(data_filtered)

输出:

            value
date             
2019-10-03      3
2019-10-04      4
2019-10-05      5
2019-10-06      6

还可以使用 Pandas 的 .loc() 方法选择日期范围内的行:

import pandas as pd

data = pd.read_csv('data.csv', parse_dates=[0], index_col='date')

start_date = '2019-10-03'
end_date = '2019-10-06'

data_filtered = data.loc[(data.index >= start_date) & (data.index <= end_date)]

print(data_filtered)

输出:

            value
date             
2019-10-03      3
2019-10-04      4
2019-10-05      5
2019-10-06      6

这种方法还可以通过组合多个日期范围来筛选数据,例如:

import pandas as pd

data = pd.read_csv('data.csv', parse_dates=[0], index_col='date')

start_date_1 = '2019-10-01'
end_date_1 = '2019-10-10'

start_date_2 = '2019-10-20'
end_date_2 = '2019-11-01'

data_filtered = data.loc[(data.index >= start_date_1) & (data.index <= end_date_1) | 
                         (data.index >= start_date_2) & (data.index <= end_date_2)]

print(data_filtered)

输出:

            value
date             
2019-10-01      1
2019-10-02      2
2019-10-03      3
2019-10-04      4
2019-10-05      5
2019-10-06      6
2019-10-07      7
2019-10-08      8
2019-10-09      9
2019-10-10     10
2019-10-20     20
2019-10-21     21
2019-10-22     22
2019-10-23     23
2019-10-24     24
2019-10-25     25
2019-10-26     26
2019-10-27     27
2019-10-28     28
2019-10-29     29
2019-10-30     30
2019-10-31     31

总结

在本文中,我们学习了如何使用 Pandas 在数据帧中选择特定日期范围内的行,涉及到了 DatetimeIndex、DateRange、Timestamp 和 .loc() 方法的用法。这些知识对于数据处理和分析非常重要,在实际工作中也会经常使用。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程