Pandas 使用Python生成时间戳的范围

  • Post category:Python

生成时间戳的范围在Pandas中是一项常见任务。利用Pandas可以生成从某个起点到终点的一系列连续的时间戳。下面我们来详细讲解Pandas如何实现这样的功能。

创建时间戳范围

我们可以使用 date_range() 函数来创建时间戳范围。它具有以下语法:

pandas.date_range(start=None, end=None, periods=None, freq=None, tz=None,
                  normalize=False, name=None, closed=None, **kwargs)
  • start:起始时间戳。
  • end:结束时间戳。
  • periods:时间戳的数量。
  • freq:时间戳的频率。
  • tz:如果存在时区,则代表时区。
  • normalize:如果为True,则将时间戳归一化为午夜,否则使用指定的时间值。
  • name:一个名称(字符串)用于表示返回的时间戳的名称。
  • closed:确定范围的开始和结束是否包含在内。如果为None时则根据freq判断。

下面我们分别说明这些参数的含义并通过实例来演示。

指定起点和终点参数

我们可以通过指定 startend 参数来生成一系列时间戳。两个参数必须要指定一个。

import pandas as pd

# 生成2019年1月1日到2019年12月31日范围内的日期时间戳
date_range = pd.date_range(start='2019-01-01', end='2019-12-31')

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-22', '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'],
              dtype='datetime64[ns]', length=365, freq='D')

以上代码会返回一个DatetimeIndex类型的时间戳范围,其中startend 参数的日期都包含在范围内,并且默认范围是按照天数生成的。通过这种方式创建的时间戳范围包含了 2019 年的所有日期。

指定时间戳的数量

我们可以通过指定periods参数来生成一定数量的时间戳。可以将起点和终点都设置为 None

import pandas as pd

# 从2019年1月1日开始生成100个日期时间戳
date_range = pd.date_range(start='2019-01-01', periods=100)

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-01-11', '2019-01-12',
               '2019-01-13', '2019-01-14', '2019-01-15', '2019-01-16',
               '2019-01-17', '2019-01-18', '2019-01-19', '2019-01-20',
               '2019-01-21', '2019-01-22', '2019-01-23', '2019-01-24',
               '2019-01-25', '2019-01-26', '2019-01-27', '2019-01-28',
               '2019-01-29', '2019-01-30', '2019-01-31', '2019-02-01',
               '2019-02-02', '2019-02-03', '2019-02-04', '2019-02-05',
               '2019-02-06', '2019-02-07', '2019-02-08', '2019-02-09',
               '2019-02-10', '2019-02-11', '2019-02-12', '2019-02-13',
               '2019-02-14', '2019-02-15', '2019-02-16', '2019-02-17',
               '2019-02-18', '2019-02-19', '2019-02-20', '2019-02-21',
               '2019-02-22', '2019-02-23', '2019-02-24', '2019-02-25',
               '2019-02-26', '2019-02-27', '2019-02-28', '2019-03-01',
               '2019-03-02', '2019-03-03', '2019-03-04', '2019-03-05',
               '2019-03-06', '2019-03-07', '2019-03-08', '2019-03-09',
               '2019-03-10', '2019-03-11', '2019-03-12', '2019-03-13',
               '2019-03-14', '2019-03-15', '2019-03-16', '2019-03-17',
               '2019-03-18', '2019-03-19', '2019-03-20', '2019-03-21',
               '2019-03-22', '2019-03-23', '2019-03-24', '2019-03-25',
               '2019-03-26', '2019-03-27', '2019-03-28', '2019-03-29',
               '2019-03-30', '2019-03-31', '2019-04-01', '2019-04-02',
               '2019-04-03', '2019-04-04', '2019-04-05', '2019-04-06',
               '2019-04-07', '2019-04-08', '2019-04-09', '2019-04-10',
               '2019-04-11', '2019-04-12', '2019-04-13', '2019-04-14'],
              dtype='datetime64[ns]', freq='D')

可以看到,该方法会生成一个长度为100的日期时间戳。起始日期是指定的日期,生成的日期按照天数递增。

指定时间戳的频率

可以通过指定freq来生成一定步长的时间戳。例如:

import pandas as pd

# 生成每周日的日期时间戳范围
date_range = pd.date_range(start='2022-01-01', end='2022-12-31', freq='W-SUN')

print(date_range)

以上代码会生成一个从 2022年1月1日开始,到2022年12月31日结束的时间戳范围,每个星期日作为间隔。

默认的频率为 “D”,表示日期时间戳生成的步长为 1 天。

在Pandas中,也允许自定义时间戳的频率。比如要生成每个月的最后一天日期时间戳范围则可以如下操作:

import pandas as pd

# 生成每月最后一天的日期时间戳范围
date_range = pd.date_range(start='2022-01-01', end='2022-12-31', freq='M') + pd.tseries.offsets.MonthEnd(0)

print(date_range)

在这个例子中,我们首先指定了起始日期和终止日期,然后通过 “M” 参数指定了日期时间戳的频率为每月。生成时间戳范围后,我们在时间戳范围后面加上了 pd.tseries.offsets.MonthEnd(0) ,将当前每月最后一天日期换成该月的月末最后一天。

以上就是Pandas生成时间戳的范围的完整攻略,并且给出了相对应的实例说明。