Python如何使用Pandas统计一周CSV中每日每小时的设备使用次数
Pandas按日按小时统计设备使用次数解决方案
报错原因
你使用df.groupby(pd.Grouper(key='Timestamp', freq='H')).count()时报错,是因为读取CSV时Timestamp列默认被识别为字符串格式,不属于Pandas的DatetimeIndex类型,不支持直接按时间频率分组。
完整实现代码
方法1:使用pd.Grouper按小时分组(推荐)
import pandas as pd PATHTOCSV = "你的CSV文件路径" df = pd.read_csv(PATHTOCSV) # 核心步骤:将Timestamp列转换为Pandas datetime类型 df['Timestamp'] = pd.to_datetime(df['Timestamp']) # 按小时分组统计记录数 hourly_stats = df.groupby(pd.Grouper(key='Timestamp', freq='H')).size().reset_index(name='count') # 按要求格式化输出 for _, item in hourly_stats.iterrows(): # 跳过无设备使用的空时段 if item['count'] < 1: continue date_part = item['Timestamp'].strftime("%Y-%m-%d") hour_part = item['Timestamp'].strftime("%H00") print(f"{date_part}: {hour_part}, Machine Count: {item['count']}")
方法2:使用提取的日期、小时字段分组
如果你已经提前提取了日期和小时字段,可以直接用两个字段分组实现统计:
import pandas as pd PATHTOCSV = "你的CSV文件路径" df = pd.read_csv(PATHTOCSV) df['Timestamp'] = pd.to_datetime(df['Timestamp']) # 提取日期、小时字段 df['date'] = df['Timestamp'].dt.date df['hour'] = df['Timestamp'].dt.hour # 按日期+小时分组统计 hourly_stats = df.groupby(['date', 'hour']).size().reset_index(name='count') # 格式化输出 for _, item in hourly_stats.iterrows(): hour_part = f"{item['hour']:02d}00" print(f"{item['date']}: {hour_part}, Machine Count: {item['count']}")
两种方法输出的结果都完全符合你要求的格式。
内容的提问来源于stack exchange,提问作者Kozer H
相关产品推荐
相关产品推荐

