Pandas时间序列基础详解(转换,索引,切片)

  • Post category:Python

Pandas时间序列基础详解(转换,索引,切片)

时间序列是指按照时间先后顺序组织排列的数据序列。在数据分析领域,时间序列数据是一种非常重要的数据形式。而 Pandas 库提供了一些有效的工具来处理时间序列数据。本文将介绍 Pandas 处理时间序列的基础操作,包括时间序列的转换、索引和切片。

时间序列的转换

Pandas 库提供了 to_datetime() 函数可以将多种不同格式的时间字符串转换成 Pandas 的时间序列对象,示例代码如下:

import pandas as pd

time_str = '2022-01-01 10:20:30'
time = pd.to_datetime(time_str)

print(time)
print(type(time))

输出结果如下:

2022-01-01 10:20:30
<class 'pandas._libs.tslibs.timestamps.Timestamp'>

这里 to_datetime() 函数将时间字符串转换成了 Timestamp 对象。Timestamp 对象是 Pandas 处理时间序列数据的基本单元。

Pandas 还提供了 date_range() 函数,可以自动生成一个时间序列。示例代码如下:

import pandas as pd

time_range = pd.date_range(start='2022-01-01', end='2022-01-05', freq='D')

print(time_range)
print(type(time_range))

输出结果如下:

DatetimeIndex(['2022-01-01', '2022-01-02', '2022-01-03', '2022-01-04',
               '2022-01-05'],
              dtype='datetime64[ns]', freq='D')
<class 'pandas.core.indexes.datetimes.DatetimeIndex'>

这里 date_range() 函数生成了一个时间范围为 2022-01-01 到 2022-01-05,频率为一天的 DatetimeIndex 对象。

时间序列的索引和切片

Pandas 库提供了 loc 和 iloc 两种索引方式,可以对时间序列进行切片操作。下面示范两种切片操作。

首先,我们创建一个时间序列数据:

import pandas as pd

time_range = pd.date_range(start='2022-01-01', end='2022-01-05', freq='D')
data = pd.Series([10, 20, 30, 40, 50], index=time_range)

print(data)

输出结果如下:

2022-01-01    10
2022-01-02    20
2022-01-03    30
2022-01-04    40
2022-01-05    50
Freq: D, dtype: int64

使用 loc 进行切片

loc 索引方式可以通过时间戳来获取指定时刻的数据,示例代码如下:

print(data.loc['2022-01-02'])
print(data.loc['2022-01-02':'2022-01-04'])

输出结果如下:

20
2022-01-02    20
2022-01-03    30
2022-01-04    40
Freq: D, dtype: int64

上述代码中,第一行输出了 2022-01-02 的数据值,第二行输出了时间范围在 2022-01-02 和 2022-01-04 之间的数据。

使用 iloc 进行切片

iloc 索引方式可以通过整数下标来获取数据,示例代码如下:

print(data.iloc[1])
print(data.iloc[1:4])

输出结果如下:

20
2022-01-02    20
2022-01-03    30
2022-01-04    40
Freq: D, dtype: int64

上述代码中,第一行输出了第二个数据值 20,第二行输出了从第二个数据到第四个数据的数据序列。

示例说明

下面通过一个实际的数据集来介绍如何应用 Pandas 处理时间序列。我们使用 Kaggle 上的一个数据集,该数据集记录了美国纽约市出租车的行驶记录。从数据集中,我们可以获取到每个出租车的行驶时间、路线和收入等信息。首先,我们读取数据集并进行简单的预处理。

import pandas as pd

df = pd.read_csv('yellow_tripdata_2019-01.csv')
df['tpep_dropoff_datetime'] = pd.to_datetime(df['tpep_dropoff_datetime'])
df['tpep_pickup_datetime'] = pd.to_datetime(df['tpep_pickup_datetime'])
df = df.set_index('tpep_pickup_datetime')

在上述代码中,我们使用 read_csv() 函数从 csv 文件中读取数据,并将 tpep_dropoff_datetime 和 tpep_pickup_datetime 两列转换成 Pandas 的时间序列数据。然后,我们将 tpep_pickup_datetime 列设置为索引列。

接下来,我们可以使用 loc 和 iloc 进行切片操作来获取不同时间范围内的数据信息,例如:

# 获取 2019 年 1 月 1 日到 2 日之间的数据
data1 = df.loc['2019-01-01':'2019-01-02']

# 获取 2019 年 1 月 1 日上午 8 点到下午 12 点之间的数据
data2 = df.loc['2019-01-01 08:00:00':'2019-01-01 12:00:00']

上述代码中,我们使用 loc 操作符获取指定时间范围内的数据。例如,第一个代码片段中,我们使用 loc 索引方式,获取 2019 年 1 月 1 日到 2 日之间的出租车行驶记录;第二个代码片段中,我们使用 loc 索引方式,获取 2019 年 1 月 1 日上午 8 点到下午 12 点之间的出租车行驶记录。

通过以上的示例,我们可以发现 Pandas 库在处理时间序列数据方面具有非常强大的功能,能够对时间序列数据进行转换、索引和切片等操作,以便于我们更好地分析和处理时间序列数据。