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()函数可以将时间序列按照需求进行切割和聚合,方便后续的数据处理和分析。