数据分析Pandas专栏---第八章<Pandas时间值的处理>

前言:

时间是数据处理中不可或缺的因素,几乎所有数据都会伴随着时间的演变而产生。在数据分析和建模过程中,正确处理时间是至关重要的。在这样的背景下,Pandas提供了强大的工具和函数,使我们能够轻松处理时间序列数据。

无论是金融数据、销售数据还是气象数据,时间信息都扮演着重要的角色。我们可以使用Pandas的时间戳(Timestamp)和时间区间(Period)数据结构来表示时间,并且可以以各种频率对时间序列进行重采样。

通过Pandas的日期范围(date_range)函数,我们可以轻松创建具有特定频率的时间序列索引。此外,Pandas还提供了强大的时间重采样功能(resample),可以将时间序列转换为不同的频率,并应用适当的聚合函数。

在数据处理中,我们经常需要进行时间窗口操作,以计算滚动平均、累积求和或其他时间相关的计算。Pandas为此提供了rolling函数,它可以在时间序列上滑动窗口,并对窗口内的数据进行处理。

总之,通过合理利用Pandas的时间处理功能,我们能够更好地理解数据背后的时间性质,从而提取出有用的见解和模式。不论是日常应用还是更复杂的时间序列分析,Pandas都是我们的得力助手,让我们能够轻松、高效地处理时间相关的数据。

正文:

在Pandas中,有许多主要的技术可以用于处理时间数据。

概念:

在Pandas中,时间戳(Timestamp)和时间区间(Period)是用来表示时间的两个重要的数据结构。

时间戳(Timestamp)

表示一个特定的时间点,精确到纳秒级别。它可以用来表示某个具体的时间,例如2024年2月27日下午2点30分。

可以使用Pandas的Timestamp对象创建一个时间戳,例如:

python 复制代码
import pandas as pd

timestamp = pd.Timestamp('2024-02-27 14:30:00')
print(timestamp)

代码将创建一个表示2024年2月27日下午2点30分的时间戳对象。

时间区间(Period)

表示一段连续的时间,可以是一天、一个月、一年等。时间区间具有固定的开始和结束,可以用来表示某个时间段的数据,例如2024年的第一季度。

可以使用Pandas的Period对象创建一个时间区间,例如:

python 复制代码
import pandas as pd

period = pd.Period('2024-01', freq='M')
print(period)

代码将创建一个表示2024年1月的时间区间对象,并且指定频率为每月。

Pandas中的时间戳和时间区间提供了丰富的功能和方法,可以进行时间的比较、运算和索引操作。


标准提取:

1.解析时间数据:

使用pd.to_datetime()函数将字符串转换为日期时间对象。可以通过设置format参数来指定日期时间字符串的格式,以确保正确解析。

python 复制代码
df['timestamp'] = pd.to_datetime(df['timestamp'], format='%Y-%m-%d %H:%M:%S')

2.提取时间组件:

使用dt属性来提取日期时间对象的各个组件,如年、月、日、小时、分钟和秒等。这使得你可以针对这些组件进行分析和操作。

python 复制代码
df['year'] = df['timestamp'].dt.year
df['month'] = df['timestamp'].dt.month
df['day'] = df['timestamp'].dt.day

3.时间偏移和位移:

可以利用pd.Timedelta对象进行时间的偏移或位移操作。例如,可以通过加减Timedelta来获取特定时间段前后的日期时间

python 复制代码
df['yesterday'] = df['timestamp'] - pd.Timedelta(days=1)
df['next_hour'] = df['timestamp'] + pd.Timedelta(hours=1)

4.时间重采样:

使用resample()函数可以将时间序列数据转换为不同的频率。你可以指定要聚合的时间间隔(如日、周、月等),并应用适当的聚合函数(如求和、均值等)。

python 复制代码
df_resampled = df.resample('D').sum()  # 将数据按天聚合求和
重点区域:

resample()函数可以将时间序列数据重新采样为不同的频率,并且可以应用指定的聚合函数来处理数据。----主要为了后续可以使用窗口来进行频次的聚合运算,所以这个要牢记!!!

python 复制代码
import pandas as pd

# 创建一个示例时间序列数据
index = pd.date_range('2022-01-01', '2022-12-31', freq='D')
data = pd.Series(range(len(index)), index=index)

# 将时间序列从每天重采样为每月,并计算每月的总和
monthly_data = data.resample('M').sum()

# 输出结果
print(monthly_data)
重点讲解:

我们首先创建了一个示例的时间序列数据data,它包含从2022年1月1日到2022年12月31日每天的数据。然后,我们使用resample()函数将时间序列从每天重采样为每月,并通过sum()函数计算了每月的总和。

resample()函数中,我们传入了一个频率字符串'M',其中'M'代表每月。你可以根据需要选择不同的频率字符串,例如'H'代表每小时,'W'代表每周等等。

除了聚合函数sum()resample()函数还可以应用其他的聚合函数,如mean()max()min()等。可以根据需要选择合适的聚合函数。

通过使用resample()函数,你可以轻松改变时间序列数据的频率,使其适应你的分析和可视化需求。

5.时间区间和时间范围:

使用pd.date_range()函数生成一系列时间点,用于创建时间索引或进行时间范围的筛选。

python 复制代码
date_range = pd.date_range(start='2022-01-01', end='2022-12-31', freq='D')  # 创建每日的时间范围
df_filtered = df[df['timestamp'].isin(date_range)]  # 选取时间范围内的数据

6.时间与周期性数据:

利用dt属性和周期性函数(如sin、cos)可以将时间数据进行周期性分析和处理。

python 复制代码
df['hour_sin'] = np.sin(2 * np.pi * df['timestamp'].dt.hour / 24)  # 计算小时数据的sin值
df['hour_cos'] = np.cos(2 * np.pi * df['timestamp'].dt.hour / 24)  # 计算小时数据的cos值

这些是Pandas中处理时间的一些主要技巧,你可以根据自己的需求和数据特点选择合适的方法进行处理。


时间处理:

当进行时间序列分析和处理时,滑动窗口移动平均是两个常用的技术。

案例一:计算滚动窗口的均值

假设你有一个包含每日销售数据的时间序列,你想计算最近7天的销售平均值,以了解销售趋势。

你可以使用滑动窗口的概念来处理这个问题。

python 复制代码
# 计算7天滑动窗口的销售均值
df['rolling_average'] = df['sales'].rolling(window=7).mean()

rolling()函数定义了一个滑动窗口,window参数指定了窗口的大小为7。然后,通过mean()函数计算滑动窗口内销售数据的均值。

案例二:计算移动平均

假设你有一个包含每日股票价格的时间序列,你想计算最近30天的移动平均价格,以平滑价格波动。移动平均是在一定时间窗口内计算均值的一种方法。

python 复制代码
# 计算30天的移动平均价格
df['moving_average'] = df['price'].rolling(window=30).mean()

rolling()函数定义了一个移动窗口,window参数指定了窗口的大小为30,然后使用mean()函数计算窗口内价格的均值。

案例三:计算滚动窗口的总和

假设你有一个包含每小时网站访问量的时间序列,你想计算最近24小时的总访问量,以了解每天的访问峰值。你可以使用滑动窗口来处理这个问题。

python 复制代码
# 计算24小时滑动窗口的总访问量
df['rolling_sum'] = df['visits'].rolling(window=24).sum()

rolling()函数定义了一个滑动窗口,window参数指定了窗口的大小为24,然后使用sum()函数计算窗口内访问量的总和。

这些案例展示了如何使用滑动窗口和移动平均来进行时间序列分析和处理。通过调整窗口大小,你可以获取不同时间范围内的统计量,以便更好地理解和分析时间序列数据的特点和趋势。


综合案例(提取表内一年内数据):

假设你有一个包含时间戳和数据的Pandas DataFrame对象,我们可以使用条件筛选来提取某个时间点内一年的数据。

python 复制代码
import pandas as pd

# 创建示例数据
data = {
    'timestamp': [
        pd.Timestamp('2023-12-31 23:59:59'),
        pd.Timestamp('2024-01-01 12:00:00'),
        pd.Timestamp('2024-02-27 10:30:00'),
        pd.Timestamp('2024-05-15 18:45:00'),
        pd.Timestamp('2024-12-31 00:00:01'),
    ],
    'value': [10, 20, 30, 40, 50]
}

df = pd.DataFrame(data)

# 设置时间戳列为索引
df.set_index('timestamp', inplace=True)

# 提取某个时间点内一年的数据
target_timestamp = pd.Timestamp('2024-01-01')
start_timestamp = target_timestamp - pd.DateOffset(years=1)
end_timestamp = target_timestamp

year_data = df.loc[start_timestamp:end_timestamp]
print(year_data)

我们首先创建了一个包含时间戳和数据的示例DataFrame对象。然后,我们将时间戳列设置为索引,以便进行条件筛选。

接下来,我们设定目标时间点target_timestamp为2024年1月1日,然后通过减去一年的时间间隔(pd.DateOffset(years=1))来计算起始时间start_timestamp,同时结束时间end_timestamp即为目标时间点。

最后,我们使用loc方法根据起始时间和结束时间来筛选数据,提取某个时间点内一年的数据,并将结果存储在year_data中。

相关推荐
sp_fyf_202420 分钟前
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-01
人工智能·深度学习·神经网络·算法·机器学习·语言模型·数据挖掘
陈燚_重生之又为程序员25 分钟前
基于梧桐数据库的实时数据分析解决方案
数据库·数据挖掘·数据分析
几两春秋梦_5 小时前
符号回归概念
人工智能·数据挖掘·回归
艾派森7 小时前
大数据分析案例-基于随机森林算法的智能手机价格预测模型
人工智能·python·随机森林·机器学习·数据挖掘
神奇夜光杯10 小时前
Python酷库之旅-第三方库Pandas(202)
开发语言·人工智能·python·excel·pandas·标准库及第三方库·学习与成长
武子康12 小时前
大数据-212 数据挖掘 机器学习理论 - 无监督学习算法 KMeans 基本原理 簇内误差平方和
大数据·人工智能·学习·算法·机器学习·数据挖掘
Q81375746012 小时前
数据挖掘在金融交易中的应用:民锋科技的智能化布局
人工智能·科技·数据挖掘
布说在见12 小时前
魅力标签云,奇幻词云图 —— 数据可视化新境界
信息可视化·数据挖掘·数据分析
Tianyanxiao13 小时前
如何利用探商宝精准营销,抓住行业机遇——以AI技术与大数据推动企业信息精准筛选
大数据·人工智能·科技·数据分析·深度优先·零售
FIT2CLOUD飞致云14 小时前
仪表板展示|DataEase看中国:历年双十一电商销售数据分析
数据分析·开源·数据可视化·dataease·双十一