📜  如何在 Pandas 中利用时间序列?(1)

📅  最后修改于: 2023-12-03 15:08:43.994000             🧑  作者: Mango

如何在 Pandas 中利用时间序列?

Pandas 是 Python 中一个非常流行的数据分析库。Pandas 让数据分析和数据操作变得简单而高效。在 Pandas 中,时间序列数据有着重要的作用。在本文中,我们将介绍如何在 Pandas 中利用时间序列数据。

时间序列的基础

时间序列是一种按照时间顺序排列的数据序列。在 Pandas 中,时间序列数据可以使用 datetime64 类型的数据来表示时间。

创建时间序列

创建一个时间序列非常简单。我们可以使用 Pandas 中的 date_range() 方法来创建一个指定时间范围的时间序列。

import pandas as pd

# 创建一个时间序列,从 2021-01-01 开始,持续 10 天
date_rng = pd.date_range(start='2021-01-01', end='2021-01-10', freq='D')

# 输出时间序列
print(date_rng)

输出结果:

DatetimeIndex(['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04',
               '2021-01-05', '2021-01-06', '2021-01-07', '2021-01-08',
               '2021-01-09', '2021-01-10'],
              dtype='datetime64[ns]', freq='D')
时间序列数据的索引

在 Pandas 中,时间序列数据可以作为 DataFrame 或 Series 的索引。我们可以使用 set_index() 方法将时间序列数据设置为 DataFrame 或 Series 的索引。

import pandas as pd

# 创建一个 DataFrame
data = {'value': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]}
df = pd.DataFrame(data)

# 创建一个时间序列,从 2021-01-01 开始,持续 10 天
date_rng = pd.date_range(start='2021-01-01', end='2021-01-10', freq='D')

# 将时间序列设置为 DataFrame 的索引
df = df.set_index(date_rng)

# 输出 DataFrame
print(df)

输出结果:

            value
2021-01-01      1
2021-01-02      2
2021-01-03      3
2021-01-04      4
2021-01-05      5
2021-01-06      6
2021-01-07      7
2021-01-08      8
2021-01-09      9
2021-01-10     10
时间序列数据的切片

在 Pandas 中,我们可以使用时间序列数据进行切片。通过切片,我们可以选择一段时间范围内的数据。

import pandas as pd

# 创建一个 DataFrame
data = {'value': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]}
df = pd.DataFrame(data)

# 创建一个时间序列,从 2021-01-01 开始,持续 10 天
date_rng = pd.date_range(start='2021-01-01', end='2021-01-10', freq='D')

# 将时间序列设置为 DataFrame 的索引
df = df.set_index(date_rng)

# 切片时间序列,选择 2021-01-03 到 2021-01-07 的数据
df_slice = df.loc['2021-01-03':'2021-01-07']

# 输出切片后的 DataFrame
print(df_slice)

输出结果:

            value
2021-01-03      3
2021-01-04      4
2021-01-05      5
2021-01-06      6
2021-01-07      7
时间序列的进阶应用

时间序列可以帮助我们进行许多有趣的应用。接下来,我们将介绍如何在 Pandas 中利用时间序列进行更加高级的操作。

时间序列的重采样

在 Pandas 中,我们可以使用 resample() 方法将时间序列数据进行重采样。重采样是指将时间序列数据从一个频率转换为另一个频率的过程。例如,我们可以将每日的数据转换为每小时的数据。

import pandas as pd

# 创建一个 DataFrame,包含从 2021-01-01 开始的 24 小时内的数据
data = {'value': [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200, 210, 220, 230, 240]}
df = pd.DataFrame(data)

# 创建一个时间序列,从 2021-01-01 00:00:00 开始,每小时采集一次数据
date_rng = pd.date_range(start='2021-01-01', end='2021-01-01 23:00:00', freq='H')

# 将时间序列设置为 DataFrame 的索引
df = df.set_index(date_rng)

# 将数据重采样为每 3 小时的数据
df_resampled = df.resample('3H').mean()

# 输出重采样后的 DataFrame
print(df_resampled)

输出结果:

                          value
2021-01-01 00:00:00   20.000000
2021-01-01 03:00:00   50.000000
2021-01-01 06:00:00   80.000000
2021-01-01 09:00:00  110.000000
2021-01-01 12:00:00  140.000000
2021-01-01 15:00:00  170.000000
2021-01-01 18:00:00  200.000000
2021-01-01 21:00:00  230.000000
时间序列数据的移动窗口

在 Pandas 中,我们可以使用 rolling() 方法对时间序列数据进行移动窗口操作。移动窗口操作是指对时间序列数据进行滑动计算的过程。例如,我们可以对时间序列数据进行滑动平均操作。

import pandas as pd

# 创建一个 DataFrame,包含从 2021-01-01 开始的 24 小时内的数据
data = {'value': [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200, 210, 220, 230, 240]}
df = pd.DataFrame(data)

# 创建一个时间序列,从 2021-01-01 00:00:00 开始,每小时采集一次数据
date_rng = pd.date_range(start='2021-01-01', end='2021-01-01 23:00:00', freq='H')

# 将时间序列设置为 DataFrame 的索引
df = df.set_index(date_rng)

# 对数据进行滑动平均操作,窗口大小为 3
df_rolling = df.rolling(window=3).mean()

# 输出滑动平均后的 DataFrame
print(df_rolling)

输出结果:

                          value
2021-01-01 00:00:00         NaN
2021-01-01 01:00:00         NaN
2021-01-01 02:00:00   20.000000
2021-01-01 03:00:00   30.000000
2021-01-01 04:00:00   40.000000
2021-01-01 05:00:00   50.000000
2021-01-01 06:00:00   60.000000
2021-01-01 07:00:00   70.000000
2021-01-01 08:00:00   80.000000
2021-01-01 09:00:00   90.000000
2021-01-01 10:00:00  100.000000
2021-01-01 11:00:00  110.000000
2021-01-01 12:00:00  120.000000
2021-01-01 13:00:00  130.000000
2021-01-01 14:00:00  140.000000
2021-01-01 15:00:00  150.000000
2021-01-01 16:00:00  160.000000
2021-01-01 17:00:00  170.000000
2021-01-01 18:00:00  180.000000
2021-01-01 19:00:00  190.000000
2021-01-01 20:00:00  200.000000
2021-01-01 21:00:00  210.000000
2021-01-01 22:00:00  220.000000
2021-01-01 23:00:00  230.000000
结论

在 Pandas 中,时间序列数据有着重要的作用。本文介绍了如何在 Pandas 中利用时间序列进行数据操作。我们学习了如何创建时间序列、将时间序列数据作为 DataFrame 或 Series 的索引、对时间序列数据进行切片、重采样和移动窗口操作。这些技能将有助于我们在使用 Pandas 进行数据分析和操作时更加高效和便捷。