如何绘制格式为"yyyy-mm-dd hh:mm:ss"的电力消耗时序数据?
电力消耗小时级时间序列绘图问题
我手头有大量按小时拆分的电力消耗数据,正在开展ARIMA分析,但绘图时遇到两个问题:
- x轴日期显示异常:截图中x轴日期格式混乱、刻度重叠,无法清晰展示小时级时间序列的时间逻辑
- 数据曲线显示异常:截图中数据走势出现大量无意义的突变、毛刺,不符合电力消耗的正常波动规律
一、修复x轴日期显示问题
强制解析时间列为datetime类型
读取数据时必须明确将时间列转为时间索引,避免默认按字符串处理:import pandas as pd # 替换成你实际的时间列名 df = pd.read_csv("data.csv", parse_dates=["timestamp"], index_col="timestamp") # 验证解析结果,应该显示连续的DatetimeIndex print(df.index[:5])自定义绘图的日期刻度规则
用matplotlib调整刻度密度与显示格式,避免重叠:import matplotlib.pyplot as plt import matplotlib.dates as mdates plt.figure(figsize=(14,7)) plt.plot(df.index, df["power_consumption"]) # 替换成你的消耗数据列名 # 设置每6小时显示一个刻度 plt.gca().xaxis.set_major_locator(mdates.HourLocator(interval=6)) # 设置日期显示格式为「年-月-日 时」 plt.gca().xaxis.set_major_formatter(mdates.DateFormatter("%Y-%m-%d %H")) # 旋转标签避免重叠 plt.xticks(rotation=45) plt.tight_layout() plt.show()
二、修复数据显示异常问题
排查并处理异常值
先定位数据中的极值、缺失值:# 查看缺失值数量 print(df.isnull().sum()) # 查看数值分布,识别超出合理范围的极值 print(df["power_consumption"].describe()) # 筛选偏离均值3倍标准差的异常值 std_threshold = df["power_consumption"].mean() + 3 * df["power_consumption"].std() outliers = df[df["power_consumption"] > std_threshold] print("异常值数量:", len(outliers))处理方式:可直接删除异常行,或用同时间段的均值填充,比如:
# 用前后1小时的均值填充异常值 df["power_consumption"] = df["power_consumption"].mask(df["power_consumption"] > std_threshold, df["power_consumption"].rolling(3, center=True).mean())确保时间序列的连续性
检查时间索引是否存在跳点或重复:# 查看时间间隔分布,正常应该全是1小时 print(df.index.to_series().diff().value_counts()) # 检查重复时间点数量 print("重复时间点:", df.index.duplicated().sum())补全缺失时间点:
# 按小时频率补全,缺失值用前向填充 df = df.asfreq("H", method="ffill")删除重复时间点:
df = df[~df.index.duplicated()]
内容的提问来源于stack exchange,提问作者noobcoder
相关产品推荐
相关产品推荐

