You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python和Pandas处理特殊结构的电力使用Excel数据?

处理特殊结构电力数据的最优Python策略(Jupyter Notebook)

首先,你的思路完全正确——将数据转换为datetime + 功率值的长格式时间序列,是后续聚合、筛选和与气象数据对比分析的关键。手动循环行列确实没必要,Pandas内置的重塑方法就能高效完成这个转换,而且处理几百行数据完全不在话下。下面是具体的步骤和最优实践:

一、读取并筛选有效数据行

你的文件里100/200行是元数据(电表标识、单位、时间间隔等),真正的用电数据在300开头的行里。首先用Pandas读取文件,然后筛选出这些有效行:

import pandas as pd

# 读取Excel文件,无表头所以设置header=None
df = pd.read_excel('your_electricity_data.xlsx', header=None)

# 筛选300开头的行,复制避免链式索引警告
data_rows = df[df[0] == 300].copy().reset_index(drop=True)

二、将宽格式数据重塑为长格式时间序列

300行的结构是:日期 + 96个15分钟时段的用电数据 + 质量标识。我们需要把这96列的宽格式数据转成每行对应一个时间点的长格式,这里用melt方法(Pandas核心内置函数,比循环高效N倍):

  1. 先处理日期列,转成标准datetime对象:
# 将第二列(索引1)的数字日期转成datetime,格式为YYYYMMDD
data_rows['base_date'] = pd.to_datetime(data_rows[1], format='%Y%m%d')
  1. 生成15分钟间隔的时间偏移量,匹配96个时段:
# 生成从00:00到23:45的15分钟间隔,共96个时间点
time_offsets = pd.timedelta_range(start='00:00', end='23:45', freq='15min')
  1. 用melt重塑数据,并合并日期与时间偏移得到完整datetime:
# 提取96个用电数据列(从第2列到倒数第2列,最后一列是质量标识)
value_columns = data_rows.columns[2:-1]

# 重塑数据:把96列转成行
melted_data = data_rows.melt(
    id_vars=['base_date', data_rows.columns[-1]],  # 保留日期和质量标识
    value_vars=value_columns,
    var_name='interval_col',
    value_name='power_kWh'
)

# 给每个时段列匹配对应的时间偏移
melted_data['time_offset'] = melted_data['interval_col'].map(dict(zip(value_columns, time_offsets)))

# 合并日期和时间偏移,得到完整的datetime
melted_data['datetime'] = melted_data['base_date'] + melted_data['time_offset']

# 整理最终的时间序列DataFrame,按需保留列
final_time_series = melted_data[['datetime', 'power_kWh', data_rows.columns[-1]]].sort_values('datetime').reset_index(drop=True)

这样你就得到了一个整洁的时间序列,每行对应一个15分钟的用电数据点,包含完整的datetime、功率值和数据质量标识。

三、关于“无需转换直接分析”的可行性

老实说,不转换的话很难高效完成你想要的对比分析:

  • 气象数据通常是长格式(每行一个时间点),和你当前的宽格式用电数据无法直接关联合并;
  • 宽格式数据做时间维度的聚合(比如按小时/天统计平均功率)、可视化(比如绘制用电趋势)都会非常繁琐;
  • 后续的建模(比如预测用电需求)也几乎都要求输入长格式的时间序列数据。

所以转换是必要的,而且用Pandas的内置方法完全是低成本、高效率的操作,没必要纠结跳过这一步。

四、后续分析与可视化示例

转换完成后,和气象数据合并、分析就非常简单了。假设你有一个包含datetime和temperature的气象数据DataFrame,合并后可以快速做相关性分析或可视化:

import seaborn as sns
import matplotlib.pyplot as plt

# 合并用电数据和气象数据
merged_df = pd.merge(final_time_series, weather_data_df, on='datetime')

# 绘制用电功率与温度的双轴折线图
plt.figure(figsize=(14, 6))
ax1 = plt.gca()
sns.lineplot(data=merged_df, x='datetime', y='power_kWh', color='blue', ax=ax1)
ax1.set_ylabel('Power Usage (kWh)')
ax1.set_xlabel('Datetime')

ax2 = ax1.twinx()
sns.lineplot(data=merged_df, x='datetime', y='temperature', color='red', ax=ax2)
ax2.set_ylabel('Temperature (°C)')

plt.title('Power Usage vs. Temperature Over Time')
plt.show()

总结

  • 用Pandas的melt方法是处理这类宽格式转长格式问题的最优解,避免手动循环,代码简洁且性能优异;
  • 转换后的时间序列结构是后续分析、建模和可视化的标准格式,能无缝对接气象数据;
  • 不要试图跳过转换步骤,否则会给后续操作带来大量不必要的麻烦。

内容的提问来源于stack exchange,提问作者Suitangi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:55:12