Pandas:选择两个日期(日期索引)之间的数据帧行

Pandas:选择两个日期(日期索引)之间的数据帧行

在本文中,我们将介绍如何在 Pandas 中使用 DateTime 索引来选择 DataFrame 中的行数据。此功能通常用于时间序列分析中。

阅读更多:Pandas 教程

Datetime 索引

DateTime 索引是Pandas提供的一种特殊的索引,它是一种能处理日期和时间类型数据的索引。DateTime索引可以帮助我们快速有效的处理时间序列数据和周期性数据,如统计一年中每个月的平均气温、一天内不同时间段的股票价格变化等。

在使用DateTime索引之前,我们需要将日期字符串转换为Datetime类型,示例如下:

import pandas as pd

# 模拟数据
df = pd.DataFrame({
    'date': ['2021-01-01', '2021-01-02', '2021-01-03'],
    'value': [1, 2, 3]
})

# 将日期转换为Datetime类型
df['date'] = pd.to_datetime(df['date'])

Pandas:选择两个日期之间的行

当我们有了Datetime类型的日期数据后,就可以使用其作为DataFrame的索引(index),以下是选择两个日期之间的行的方法:

import pandas as pd

# 模拟数据
df = pd.DataFrame({
    'date': ['2021-01-01', '2021-01-02', '2021-01-03'],
    'value': [1, 2, 3]
})

# 将日期转换为Datetime类型
df['date'] = pd.to_datetime(df['date'])
# 设置日期为索引
df.set_index('date', inplace=True)

# 选择2021-01-01和2021-01-02之间的行
df.loc['2021-01-01':'2021-01-02']

结果如下:

date value
2021-01-01 1
2021-01-02 2

可以看到,只有2021-01-01和2021-01-02两天的数据被筛选出来了。我们也可以只选择某一天的数据:

# 选择2021-01-01的数据
df.loc['2021-01-01']

结果如下:

date value
2021-01-01 1

还可以用between_time()方法来选择具体某一时间段内的数据,示例如下:

# 选择每天 8:00 到 11:00 的数据
df.between_time('8:00', '11:00')

结果如下:

date value
2021-01-01 1
2021-01-02 2
2021-01-03 3

实例

下面,让我们用一个实例来展示如何使用 Pandas 来选择两个日期之间的数据。我们将使用Kaggle上的一个数据集,其中包含了股票价格的历史数据。我们将使用 Pandas 来计算某支股票在两个日期之间的回报率。数据集可以在以下链接中下载:

[https://www.kaggle.com/borismarjanovic/price-volume-data-for-all-us-stocks-etfs]

首先,使用 Pandas 读取数据:

import pandas as pd

df = pd.read_csv('price-volume-data-for-all-us-stocks-etfs/Data/ETFs/FB.csv')
df.head()

结果如下:

Date Open High Low Close Adj Close Volume
2012-05-18 42.05 45.00 38.00 38.23 38.23 573576400
2012-05-21 36.53 36.66 33.00 34.03 34.03 168192700
2012-05-22 32.61 33.59 30.94 31.00 31.00 101786600
2012-05-23 31.37 32.50 31.36 32.00 32.00 73600000
2012-05-24 32.95 33.21 31.77 33.03 33.03 50237200

我们可以发现,数据以日期为索引。

接下来,将 Date 列转换为 DateTime 类型,并将其设为索引:

df['Date'] = pd.to_datetime(df['Date'])
df.set_index('Date', inplace=True)

现在,我们可以选择某个时间段的数据,比如在2017年6月30日和2018年6月30日之间,Facebook的股票回报率是多少:

start_date = '2017-06-30'
end_date = '2018-06-30'

start_price = df.loc[start_date]['Adj Close']
end_price = df.loc[end_date]['Adj Close']

return_rate = (end_price - start_price) / start_price
print('Return rate for Facebook between', start_date, 'and', end_date, ':', round(return_rate, 3))

输出结果为:

Return rate for Facebook between 2017-06-30 and 2018-06-30 : 0.192

我们可以看到,Facebook在2017年6月30日至2018年6月30日期间的回报率为19.2%。

总结

在本文中,我们介绍了如何在 Pandas 中使用 DateTime 索引来选择 DataFrame 中的行数据。我们给出了一些示例,如如何选择两个日期之间的数据,如何选择某一天、某一时间段的数据,以及如何运用Pandas计算股票回报率等。DateTime 索引可以帮助我们快速有效的处理时间序列数据和周期性数据,是时间序列分析必备的工具之一。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程