下面是详细的讲解:
1. Pandas中对时间的操作简介
Pandas是Python数据分析库中最为常用的一款,在其设计中,对于时间的处理方式也是独具匠心。可以非常方便地实现时间序列数据的处理,从而更加便利地进行数据分析、统计以及可视化等操作。
Pandas处理时间数据主要有以下方面:
1. 生成时间序列
2. 时间的索引和切片
3. 时间的重采样
4. 时间的移动和滑动窗口
接下来将从这些方面一一进行详细讲解。
2. 生成时间序列
在Pandas中,可以通过date_range()函数生成一个时间序列,该时间序列以指定的开始时间和结束时间为基准,生成一个固定频率的日期时间序列。
下面是一个例子:
import pandas as pd
# 生成时间序列
time_index = pd.date_range('2020-01-01',periods=10, freq='D')
print('生成的时间序列为:\n',time_index)
输出结果为:
生成的时间序列为:
DatetimeIndex(['2020-01-01', '2020-01-02', '2020-01-03', '2020-01-04',
'2020-01-05', '2020-01-06', '2020-01-07', '2020-01-08',
'2020-01-09', '2020-01-10'],
dtype='datetime64[ns]', freq='D')
在上面的代码中,首先通过date_range()函数生成了一个10天的时间序列,该序列的开始时间为'2020-01-01',结束时间为'2020-01-10',时间序列的频率是'D',即天。
3. 时间的索引和切片
在生成时间序列之后,我们就可以将其作为Pandas中DataFrame或Series的索引,实现对时间序列数据的索引和切片。
下面是一个通过时间序列生成DataFrame的例子:
import pandas as pd
import numpy as np
# 生成时间序列
time_index = pd.date_range('2020-01-01',periods=10, freq='D')
# 生成随机数据
data_list = np.random.randint(0,100,10)
# 创建DataFrame
df = pd.DataFrame(data_list, index=time_index, columns=['value'])
print('创建的DataFrame为:\n',df)
输出结果为:
创建的DataFrame为:
value
2020-01-01 26
2020-01-02 4
2020-01-03 13
2020-01-04 33
2020-01-05 48
2020-01-06 26
2020-01-07 95
2020-01-08 20
2020-01-09 57
2020-01-10 33
在上面的代码中,我们首先创建了一个10天的时间序列time_index,并根据该时间序列生成了一个包含10个随机数的DataFrame df,随机数的值位于0~100之间。
接下来我们可以通过时间序列的索引和切片进行数据选择和筛选:
# 获取2020年1月3日的数据
print('2020年1月3日的数据为:\n',df.loc['2020-01-03'])
# 获取2020年1月4日到2020年1月6日的数据
print('2020年1月4日到2020年1月6日的数据为:\n',df.loc['2020-01-04':'2020-01-06'])
输出结果为:
2020年1月3日的数据为:
value 13
Name: 2020-01-03 00:00:00, dtype: int32
2020年1月4日到2020年1月6日的数据为:
value
2020-01-04 33
2020-01-05 48
2020-01-06 26
在上面的代码中,我们通过df.loc[]的方式获取了指定时间点下的数据或者指定时间段内的数据。
4. 时间的重采样
将时间序列数据按照指定的时间频率进行重新采样,是Pandas中常用的时间序列处理方式之一。重采样能够对时间序列数据统计、聚合或插值,实现降采样或升采样等操作,多数情况下需要结合groupby()一起使用。
下面是一个将数据按月份重新采样的例子:
import pandas as pd
import numpy as np
# 生成时间序列
time_index = pd.date_range('2020-01-01',periods=12, freq='MS')
# 生成随机数据
data_list = np.random.randint(0,100,12)
# 创建DataFrame
df = pd.DataFrame(data_list, index=time_index, columns=['value'])
print('创建的DataFrame为:\n',df)
# 将数据按月份进行重新采样,使用平均值来汇总
df_resampled = df.resample('M').mean()
print('重新采样后的DataFrame为:\n',df_resampled)
输出结果为:
创建的DataFrame为:
value
2020-01-01 51
2020-02-01 46
2020-03-01 42
2020-04-01 27
2020-05-01 58
2020-06-01 60
2020-07-01 34
2020-08-01 38
2020-09-01 94
2020-10-01 7
2020-11-01 51
2020-12-01 96
重新采样后的DataFrame为:
value
2020-01-31 51.000000
2020-02-29 46.000000
2020-03-31 42.000000
2020-04-30 27.000000
2020-05-31 58.000000
2020-06-30 60.000000
2020-07-31 34.000000
2020-08-31 38.000000
2020-09-30 94.000000
2020-10-31 7.000000
2020-11-30 51.000000
2020-12-31 96.000000
在上面的代码中,我们首先创建了12个月的时间序列 time_index,并根据该时间序列生成了一个包含12个随机数的DataFrame df,随机数组成的数据分布于这12个时间点上。
接着,我们使用df.resample('M').mean()函数来将数据按月份重新采样,并使用平均值来计算每个月的总数据量。
细节说明:
* 'M'表示按月份进行重采样,可以尝试使用'D'、'H'、'T'等来进行不同频率的重采样
* mean()函数为这里使用的重采样计算方法,可以尝试使用sum()、min()、max()、median()等来进行不同的计算
5. 时间的移动和滑动窗口
在时间序列数据中,移动数据与滑动窗口操作是常见且重要的数据处理方式。
* 移动数据是指将数据整体前移或后移n个时间点,以消除时间序列数据自相关性的干扰;
* 滑动窗口则是指在时间序列上,按照固定长度的窗口滑动,得到每个窗口内数据的某种统计值,以消除时间序列数据的噪声干扰。
下面是一些对时间序列数据进行滑动窗口处理的示例:
import pandas as pd
import numpy as np
# 生成时间序列
time_index = pd.date_range('2020-01-01',periods=12, freq='MS')
# 生成随机数据
data_list = np.random.randint(0,30,12)
# 创建DataFrame
df = pd.DataFrame(data_list, index=time_index, columns=['value'])
print('创建的DataFrame为:\n',df)
# 滑动窗口处理数据
df_windowed = df.rolling(window=4).mean() # window表示滑动窗口的长度,本例中为四个时间点,mean表示该时间窗口内数据的平均值
print('滑动窗口处理后的DataFrame为:\n',df_windowed)
输出结果为:
创建的DataFrame为:
value
2020-01-01 27
2020-02-01 16
2020-03-01 25
2020-04-01 15
2020-05-01 29
2020-06-01 26
2020-07-01 6
2020-08-01 0
2020-09-01 13
2020-10-01 4
2020-11-01 9
2020-12-01 2
滑动窗口处理后的DataFrame为:
value
2020-01-01 NaN
2020-02-01 NaN
2020-03-01 NaN
2020-04-01 20.750000
2020-05-01 21.250000
2020-06-01 23.750000
2020-07-01 18.750000
2020-08-01 14.000000
2020-09-01 11.250000
2020-10-01 5.750000
2020-11-01 7.500000
2020-12-01 7.000000
在上面的代码中,我们首先使用了之前生成的时间序列time_index和一些随机数生成了DataFrame df。
接着,我们使用了df.rolling(window=4).mean()语句,对时间窗口内的数据进行了平均值计算,得到了滑动窗口处理后的数据,并将处理后的数据存放在df_windowed变量中,最后打印出df_windowed中的数值。
细节说明:
* rolling()函数中的window参数,表示滑动窗口的长度。在本例中,每个时间窗口的长度均为4,也可以设置为其它值。
* mean()函数表示,在窗口内进行数值计算的方式。除mean()函数外,还存在sum()、max()、min()、median()等函数。
至此,Pandas中对时间的操作已经讲解完毕。在实际的数据分析和处理中,时间序列数据的处理通常是不可避免的任务之一,希望这篇文章能给您的处理工作带来一些帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python Pandas数据中对时间的操作 - Python技术站