如何在Pandas中将CSV中的时间序列数据按24小时间隔分组?
如何用Pandas将时间序列数据按24小时间隔分组
嘿,这个需求在Pandas里处理起来其实挺直接的,我给你一步步拆解操作:
第一步:确保时间列是Pandas可识别的datetime类型
你的CSV里的date字段是带UTC时区的字符串格式,我们需要先把它转换成Pandas的datetime类型,这样才能进行时间分组操作。
方法1:读取CSV时直接解析时间列
import pandas as pd # 读取CSV,同时解析date列为带UTC时区的datetime,并设为索引(方便后续resample操作) df = pd.read_csv('你的文件名.csv', parse_dates=['date'], index_col='date', utc=True)
方法2:读取后再转换时间列
如果读取时没做解析,也可以事后处理:
df = pd.read_csv('你的文件名.csv') # 将date列转换为带UTC时区的datetime类型 df['date'] = pd.to_datetime(df['date'], utc=True)
第二步:按24小时间隔分组并聚合
Pandas提供了两种常用的方式来实现按时间间隔分组:
方式1:使用resample(适合时间列为索引的情况)
resample是专门为时间序列设计的分组工具,用'D'作为频率参数代表日历日(24小时),你可以根据需求指定聚合函数(比如均值、求和等):
# 按24小时分组,计算各指标的均值/求和,可根据你的需求调整聚合逻辑 daily_summary = df.resample('D').agg({ 'cpu': 'mean', # CPU使用率的日均均值 'mem': 'mean', # 内存使用率的日均均值 'load': 'mean', # 系统负载的日均均值 'drops': 'sum', # 丢包数的日总和 'latency': 'mean', # 延迟的日均均值 # 其他需要聚合的字段都可以在这里添加 })
方式2:使用groupby + Grouper(适合时间列不是索引的情况)
如果不想把date设为索引,用pd.Grouper指定时间列和分组频率即可:
daily_summary = df.groupby(pd.Grouper(key='date', freq='D')).agg({ 'cpu': 'mean', 'mem': 'mean', 'load': 'mean', 'drops': 'sum', })
进阶:自定义24小时窗口的起始时间
如果你的需求不是从午夜0点开始的24小时,而是从某个特定时间(比如每天9点)开始计算24小时周期,可以调整频率参数和起始点:
# 从每天9点开始的24小时窗口 daily_summary = df.resample('24H', origin='2018-02-13 09:00:00').agg({ 'cpu': 'mean', 'mem': 'mean', })
注意事项
- 你的示例数据里有很多空值(
,,,,,),Pandas的聚合函数(比如mean)会自动忽略NaN值,如果需要填充空值,可以先使用df.fillna(0)或者其他填充逻辑。 - 确保
date列的时区处理正确,避免因为时区偏差导致分组错误。
内容的提问来源于stack exchange,提问作者Souvik Ray
相关产品推荐
相关产品推荐

