Python Pandas – 创建时间间隔并使用时间戳作为界限

Python Pandas – 创建时间间隔并使用时间戳作为界限

在数据分析和处理中,经常需要对时间进行处理和分割。Python Pandas库提供了一些便捷的函数和方法来处理时间,并且支持使用时间戳进行数据的筛选和切片。

生成时间间隔

使用Pandas库中的date_range()函数可以生成一个时间间隔,语法如下:

import pandas as pd

pd.date_range(start=None, end=None, periods=None, freq=None, tz=None, normalize=False)

其中参数说明如下:

  • start:生成时间序列的起始时间点,可以是字符串、时间戳和datetime类型,默认为None。
  • end:生成时间序列的结束时间点,可以是字符串、时间戳和datetime类型,默认为None。
  • periods:要生成的时间点个数,默认为None。
  • freq:时间序列的时间间隔,可以是字符串或Timedelta对象,默认为Day(一天)。
  • tz:时区,默认为None。
  • normalize:对时间戳进行规范化,默认为False。

下面是一个生成时间间隔的示例:

import pandas as pd

# 生成1天的时间间隔
date_rng = pd.date_range(start='1/1/2022', end='1/10/2022', freq='D')

print(date_rng)

运行结果如下:

DatetimeIndex(['2022-01-01', '2022-01-02', '2022-01-03', '2022-01-04',
               '2022-01-05', '2022-01-06', '2022-01-07', '2022-01-08',
               '2022-01-09', '2022-01-10'],
              dtype='datetime64[ns]', freq='D')

上面的代码生成了从2022年1月1日到2022年1月10日十天的日期序列,频率为一天。其中的DatetimeIndex对象是Pandas中用来表示时间序列的一种类型。

使用时间戳作为界限

在上述生成的时间间隔中,我们可以使用时间戳进行数据的筛选和切片。例如,我们希望只取出2022年1月1日到2022年1月5日之间的数据,可以使用如下的代码:

import pandas as pd

# 生成1天的时间间隔
date_rng = pd.date_range(start='1/1/2022', end='1/10/2022', freq='D')

# 使用时间戳进行数据的筛选和切片
print(date_rng[date_rng < '2022-01-06'])

运行结果如下:

DatetimeIndex(['2022-01-01', '2022-01-02', '2022-01-03', '2022-01-04',
               '2022-01-05'],
              dtype='datetime64[ns]', freq='D')

上述代码使用datetime64类型的对象表示时间戳,通过比较可以筛选出符合条件的时间序列。

范围切割

在一个时间序列中,我们还可以按照时间间隔进行切割,例如将一个月的数据分为一周一周的子集。使用Pandas库中的resample()函数可以实现对时间序列的切割。resample()函数的语法如下:

import pandas as pd

df.resample(rule, how=None, axis=0, fill_method=None, closed=None, label=None, convention='start', kind=None, loffset=None, limit=None, base=0, on=None, level=None)

其中参数说明如下:

  • rule:时间序列频率字符串或DateOffset对象,例如“5min”表示5分钟,可以是秒、分钟、小时、日、月、年等。
  • how:聚合函数或函数列表,例如求和函数sum、平均函数mean等。
  • axis:指定按照行或列进行聚合计算,默认为0(按照行进行计算)。
  • fill_method: 设定切割后的空值填充方式,可以是ffill(向前填充)、bfill(向后填充)等。
  • closed:切割后的区间是否包含右端点(闭区间)、左端点(左闭右开)等,默认为None(左闭右开)。
  • label:切割后区间的标签设定,可以是左端点、右端点、中点等,默认为None(左端点)。
  • convention:相同切割点处的时间如何合并计算,默认为start(以左端点计算)。
  • kind:指定使用何种方式进行索引,例如时间本身、时间戳等,默认为None。
  • loffset:用于调整索引值的偏移量,默认为None。
  • limit:在resample()切割之后,最大的切割数量,默认为None。

下面是一个使用resample()函数进行切割的示例:

import pandas as pd

# 生成5分钟的时间间隔
date_rng = pd.date_range(start='1/1/2022', end='1/2/2022', freq='5min')

# 生成随机数值
df = pd.DataFrame(date_rng, columns=['date'])
df['data'] = np.random.randint(0,100,size=(len(date_rng)))

# 将5分钟的时间序列聚合为小时的时间序列
df.resample('H', on='date').sum()

运行结果如下:

                     data
date                     
2022-01-01 00:00:00  154
2022-01-01 01:00:00  182
2022-01-01 02:00:00  127
2022-01-01 03:00:00  140
2022-01-01 04:00:00  122
2022-01-01 05:00:00  183
2022-01-01 06:00:00  113
2022-01-01 07:00:00   79
2022-01-01 08:00:00  165
2022-01-01 09:00:00   41
2022-01-01 10:00:00  128
2022-01-01 11:00:00  136
2022-01-01 12:00:00   96
2022-01-01 13:00:00   88
2022-01-01 14:00:00  116
2022-01-01 15:00:00  130
2022-01-01 16:00:00  135
2022-01-01 17:00:00  174
2022-01-01 18:00:00  107
2022-01-01 19:00:00  163
2022-01-01 20:00:00  107
2022-01-01 21:00:00  196
2022-01-01 22:00:00  125
2022-01-01 23:00:00  176
2022-01-02 00:00:00  105

上述代码使用Pandas生成5分钟的时间序列,然后根据时间序列中的数据,将其聚合为每小时的数据。这样可以更加方便后续的数据处理和分析。

结论

在Python数据分析和处理中,使用Pandas处理时间的方法十分简单便捷。通过生成时间间隔,能够快速生成需要的时间序列;而使用时间戳,能够方便地实现对时间序列数据的筛选和切片。最后,使用resample()函数可以将时间序列按照需求进行切割和聚合,方便后续的数据处理和分析。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程