很多零基础读者一听到 Python,就会有一种压力:
是不是要先学很多语法?
是不是要背各种函数?
是不是要买一本厚厚的 Python 教材?
是不是要学完爬虫、算法、数据库、机器学习,才能开始分析电力数据?
答案是:
不用。
至少在《Python电力交易》这个系列里,我们不走“先学完 Python,再学业务”的路线。
我们走的是:
用到什么,学什么。学一点,马上放到电力数据场景里用。
因为你的目标不是参加编程考试。
你的目标是解决电力交易相关的数据问题。
比如:
读取一张电价表。
筛选高价时段。
计算平均电价。
找出最高电价。
画出电价趋势图。
把一份 Excel 结果导出来。
这些任务并不需要你一开始掌握特别复杂的编程能力。
你只需要先学会几个核心工具。
这就是本章标题里的意思:
够用就好,不做无用功。
如果你是零基础读者,这一章不用追求一次性理解所有 Python 语法。
本章只要求你完成三件事:
1.看懂变量、条件判断和循环的基本作用;
2.用 Pandas 读取一份电价数据;
3.用 Matplotlib 画出第一张电价趋势图。
文末我准备了第3章配套资料包,包括完整代码、示例电价数据、运行说明、Python基础语法速查表和电价分析模板说明。
建议先收藏本文,再跟着资料包跑一遍。
一、Python 在电力交易里到底干什么?
Python 在电力交易数据分析中的作用,可以先理解为三个字:
帮你算。
再多说一点,就是:
帮你批量、稳定、可复用地处理电力数据。
比如你手里有一张电价表。
Excel 当然也能打开。
但如果你要反复做这些事情:
每天读取一次电价数据;
每月统计一次平均电价;
每次找出高价时段;
每次把结果画成趋势图;
每次输出一份表格;
那么 Python 就会很有价值。
因为 Python 可以把这些步骤写成代码。
只要数据格式差不多,后面就能重复运行。
这就是为什么我们要学 Python。
不是为了炫技。
不是为了写复杂模型。
而是为了把重复的电力数据工作自动化。
二、Python核心基础:先掌握这4个概念
这一节我们只讲四个基础概念:
变量。
数据类型。
条件判断。
循环。
这四个概念,足够支撑你理解很多入门代码。
1. 变量:给数据起一个名字
变量可以理解为:
用一个名字保存一个数据。
比如我们要保存一个电价:
price_yuan_per_kwh = 0.75
这行代码的意思是:
把 0.75 这个数,保存到 price_yuan_per_kwh 这个名字里。
在电力交易场景里,变量可以这样用:
price_yuan_per_kwh = 0.75# 电价,单位:元/kWhenergy_kwh = 100# 电量,单位:kWhcost_yuan = price_yuan_per_kwh * energy_kwh
这里:
price_yuan_per_kwh 表示电价,单位是元/kWh。
energy_kwh 表示电量,单位是 kWh。
cost_yuan 表示电费,单位是元。
最基础的计算逻辑就是:
电费 = 电价 × 电量
对应到 Python 里就是:
cost_yuan = price_yuan_per_kwh * energy_kwh
这就是变量的作用。
它让数据有了名字,也让计算过程更容易看懂。
2. 数据类型:不同数据有不同样子
Python 里的数据有不同类型。
你现在先记住三种就够了。
第一种是数字。
比如:
price_yuan_per_kwh = 0.75load_kw = 500
第二种是文本。
比如:
time = "08:00"province = "广东"
第三种是列表。
比如:
prices = [0.32, 0.68, 0.92, 0.75]
列表可以理解为:
一组数据排成一队。
在电力数据里,列表很常见。
比如一天中几个时段的电价:
prices = [0.32, 0.68, 0.92, 0.75]
一天中几个时段的负荷:
loads = [320, 520, 760, 430]
后面我们会用 Pandas 处理更正式的表格数据。
但在理解代码时,你先知道这些基础类型就够了。
3. 条件判断:如果电价高,就提醒我
条件判断可以理解为:
如果满足某个条件,就执行某个动作。
比如:
price_yuan_per_kwh = 0.92if price_yuan_per_kwh > 0.8: print("这是一个较高电价时段")
这段代码的意思是:
如果电价大于 0.8 元/kWh,就打印提醒。
在电力交易场景中,条件判断很常见。
比如:
如果电价高于某个阈值,就标记为高价时段。
如果负荷超过某个数值,就标记为高负荷时段。
如果峰谷价差大于某个水平,就进一步分析储能可能性。
当然,本书前期不会直接做交易决策。
我们只是先学习如何用代码识别数据特征。
4. 循环:对很多条数据重复做同一件事
循环可以理解为:
对一组数据,一条一条处理。
比如我们有一组电价:
prices = [0.32, 0.68, 0.92, 0.75]
现在想把每个电价都打印出来:
for price in prices: print(price)
这段代码的意思是:
从 prices 里面一个一个取出电价,并打印出来。
如果我们想找出高价时段,可以这样写:
for price in prices:if price > 0.8: print("发现高价:", price)
这里就同时用到了循环和条件判断。
在电力数据分析里,很多工作本质上都是循环:
对每小时电价进行计算。
对每天负荷进行统计。
对每个用户计算电费。
对每个月数据生成报表。
所以循环非常重要。
但你不用怕。
后面我们会用 Pandas 处理大部分表格计算,很多时候不需要自己写复杂循环。
三、核心工具库入门:Pandas
前面讲的变量、条件、循环,是 Python 的基础能力。
但真正处理电力数据时,我们通常会遇到表格。
比如:
电价表、负荷表、用户清单、电费明细、现货价格表、中长期交易结果表。
这些表格可能是 CSV,也可能是 Excel。
这时候就需要 Pandas。
你可以先把 Pandas 理解为:
Python 里的表格处理工具。
它能做很多 Excel 能做的事情,比如:
读取表格、查看前几行、筛选数据、计算平均值、找最大值和最小值、新增一列、导出结果。
本章我们只用它做三件事:
1.读取电价数据
2.打印数据
3.筛选高价时段。
四、核心工具库入门:Matplotlib
如果说 Pandas 负责处理表格,那么 Matplotlib 就负责画图。
你可以先把 Matplotlib 理解为:
Python 里的基础画图工具。
在电力交易数据分析中,画图非常重要。
因为电力数据通常有明显的时间特征。
比如:
一天 24 小时电价变化。
一天 96 点负荷曲线。
一个月现货电价波动。
工作日和周末用电差异。
峰时、平时、谷时电价对比。
如果只看数字,很容易看不出变化。
但画成图之后,很多问题会直观很多。
本章我们先画一张最简单的电价趋势图。
只要能看到电价在不同时段的变化,就已经完成了第一步。
五、本章实操:读取电价数据,绘制简单趋势图
接下来进入实操。
本章案例要做的事情很简单:
注意:
本章数据是教学用模拟数据,不代表任何省份真实电价,也不代表现货价格、零售价格或结算价格。
示例数据说明
我们准备一份名为price_data.csv的 CSV 文件。
内容如下:
time,price_yuan_per_kwh00:00,0.3204:00,0.3508:00,0.6810:00,0.8212:00,0.9514:00,0.9216:00,0.7818:00,0.8820:00,0.7522:00,0.45
这份数据表示某个教学场景中,一天内不同时段的电价。
为了降低新手出错概率,本章代码会自动创建这份 CSV 文件。
也就是说,你只需要复制代码运行即可。
如果文件不存在,代码会自动生成示例数据。
如果文件已经存在,代码会直接读取已有文件。
建议把代码文件放在一个简单的英文路径中,例如:
D:\python_power_trade\chapter03
这样可以减少中文路径、空格路径、压缩包目录、微信下载目录带来的排查困难。
Python完整代码
本章需要用到两个库:pandas 和 matplotlib。
如果你还没有安装,可以在命令行输入:
python -m pip install pandas matplotlib
如果 Windows 上 python 命令不生效,可以尝试:
py -m pip install pandas matplotlib
如果你使用国内网络环境,下载比较慢,可以使用:
python -m pip install pandas matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple
或者:
py -m pip install pandas matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple
请新建一个 Python 文件:
chapter03_price_trend.py
下面这段代码不需要你一行一行全部背下来。
第3章的目标只有一个:
用 Python 读取电价数据,并画出一张最简单的电价趋势图。
如果你不想手动整理文件,可以在文末私信关键词
电力Python03
领取本章资料包,里面已经准备好代码、示例数据和运行说明。
然后复制下面完整代码:
# -*- coding: utf-8 -*-# 第3章实操:读取电价数据,绘制简单电价趋势图# 说明:# 1. 本案例使用教学用模拟数据,不代表任何省份真实电价或交易规则# 2. 本案例仅用于 Python 数据分析学习,不构成交易建议或经营决策依据from pathlib import Pathimport pandas as pdimport matplotlib.pyplot as pltprint("=== Python电力交易第3章:读取电价数据并绘制趋势图 ===")# 1. 找到当前 Python 文件所在的文件夹current_folder = Path(__file__).resolve().parent# 2. 设置 CSV 文件路径和图片保存路径csv_file = current_folder / "price_data.csv"chart_file = current_folder / "price_trend.png"# 3. 如果 CSV 文件不存在,就自动创建一份教学用模拟数据ifnot csv_file.exists(): sample_data = {"time": ["00:00", "04:00", "08:00", "10:00", "12:00","14:00", "16:00", "18:00", "20:00", "22:00" ],"price_yuan_per_kwh": [0.32, 0.35, 0.68, 0.82, 0.95,0.92, 0.78, 0.88, 0.75, 0.45 ], } sample_df = pd.DataFrame(sample_data) sample_df.to_csv(csv_file, index=False, encoding="utf-8-sig") print(f"\n未发现 {csv_file.name},已自动创建教学用模拟数据文件。")else: print(f"\n已发现 {csv_file.name},将直接读取该文件。")# 4. 读取电价数据df = pd.read_csv(csv_file)# 5. 检查必要字段是否存在required_columns = ["time", "price_yuan_per_kwh"]for column in required_columns:if column notin df.columns:raise ValueError(f"CSV 文件中缺少必要字段:{column}")# 6. 确保电价列是数字,方便后面统计和绘图df["price_yuan_per_kwh"] = pd.to_numeric(df["price_yuan_per_kwh"])# 7. 打印完整数据print("\n原始电价数据:")print(df)# 8. 计算基础统计指标max_price = df["price_yuan_per_kwh"].max()min_price = df["price_yuan_per_kwh"].min()avg_price = df["price_yuan_per_kwh"].mean()print("\n电价统计结果:")print(f"最高电价:{max_price:.2f} 元/kWh")print(f"最低电价:{min_price:.2f} 元/kWh")print(f"平均电价:{avg_price:.2f} 元/kWh")# 9. 筛选高价时段# 这里设置一个教学用阈值:电价大于 0.80 元/kWh,就标记为高价时段high_price_df = df[df["price_yuan_per_kwh"] > 0.80]print("\n高价时段:")print(high_price_df)# 10. 绘制电价趋势图plt.figure(figsize=(9, 5))plt.plot( df["time"], df["price_yuan_per_kwh"], marker="o")plt.title("Electricity Price Trend")plt.xlabel("Time")plt.ylabel("Price (Yuan/kWh)")plt.grid(True)plt.tight_layout()# 11. 保存图片plt.savefig(chart_file, dpi=150)print(f"\n电价趋势图已保存为:{chart_file.name}")# 12. 显示图片plt.show()print("\n恭喜你,已经成功读取电价数据,并绘制出第一张电价趋势图!")
代码解释
1. 文件编码声明
# -*- coding: utf-8 -*-
这一行表示代码文件使用 UTF-8 编码。
现在大多数新版编辑器默认支持 UTF-8,所以这行通常不是必须的。
但对零基础读者来说,保留这一行可以减少少数电脑上中文乱码的概率。
2. 导入工具库
from pathlib import Pathimport pandas as pdimport matplotlib.pyplot as plt
这里导入了三个工具。
pathlib 是 Python 自带的路径处理工具,用来帮助程序找到文件位置。
pandas 用来读取和处理表格数据。
matplotlib.pyplot 用来画图。
其中:
import pandas as pd
意思是把 pandas 简写成 pd。
这是数据分析中非常常见的写法。
import matplotlib.pyplot as plt
意思是把画图工具简写成 plt。
你现在不用背,只要先照着写。
3. 找到当前代码文件所在文件夹
current_folder = Path(__file__).resolve().parent
这行代码的意思是:
找到当前这个 Python 文件所在的文件夹。
为什么要这样写?
因为很多新手会遇到一个问题:
明明 CSV 文件和 Python 文件放在同一个文件夹里,但运行时还是提示找不到文件。
原因通常是:
Python 当前运行位置,和代码文件实际所在位置不一致。
使用这一行代码后,程序会从“当前 Python 文件所在文件夹”去生成和读取 CSV 文件,路径更稳定。
4. 设置 CSV 文件和图片文件路径
csv_file = current_folder / "price_data.csv"chart_file = current_folder / "price_trend.png"
这两行代码表示:
price_data.csv 会生成或读取在当前 Python 文件所在文件夹中。
price_trend.png 也会保存到当前 Python 文件所在文件夹中。
也就是说,代码运行后,你可以在同一个文件夹里看到:
chapter03_price_trend.pyprice_data.csvprice_trend.png
这样对新手更友好,不容易找不到文件。
5. 自动创建模拟数据
ifnot csv_file.exists():
这行代码的意思是:
如果当前文件夹里没有 price_data.csv,就执行下面的代码,自动创建一份教学用模拟数据。
下面这段就是创建教学用模拟数据:
sample_data = {"time": ["00:00", "04:00", "08:00", "10:00", "12:00","14:00", "16:00", "18:00", "20:00", "22:00" ],"price_yuan_per_kwh": [0.32, 0.35, 0.68, 0.82, 0.95,0.92, 0.78, 0.88, 0.75, 0.45 ],}
你可以把它理解成一张小表格。
有两列:
time:时间。
price_yuan_per_kwh:电价,单位是元/kWh。
然后这两行代码把它变成表格并保存为 CSV 文件:
sample_df = pd.DataFrame(sample_data)sample_df.to_csv(csv_file, index=False, encoding="utf-8-sig")
其中:
pd.DataFrame() 表示创建一张表。
to_csv() 表示把表保存成 CSV 文件。
index=False 表示不要把行号保存进去。
encoding="utf-8-sig" 是为了让部分电脑用 Excel 打开 CSV 时,不容易出现中文乱码。
6. 读取电价数据
df = pd.read_csv(csv_file)
这行代码的意思是:
用 Pandas 读取 price_data.csv 文件,并把它保存到 df 里。
df 是 DataFrame 的缩写。
可以先理解为:Python 里的表格。
7. 检查必要字段是否存在
required_columns = ["time", "price_yuan_per_kwh"]for column in required_columns:if column notin df.columns:raise ValueError(f"CSV 文件中缺少必要字段:{column}")
这段代码的意思是:
检查 CSV 文件里是否有 time 和 price_yuan_per_kwh 这两列。
如果缺少某一列,程序会主动报错,并提示缺少哪个字段。
这样比直接出现 KeyError 更适合新手理解。
比如你把表头写成:
time,price
程序就会提示缺少:
price_yuan_per_kwh
本章为了降低难度,建议先完全使用示例表头:
time,price_yuan_per_kwh
8. 确保电价列是数字
df["price_yuan_per_kwh"] = pd.to_numeric(df["price_yuan_per_kwh"])
这行代码的意思是:
把 price_yuan_per_kwh 这一列转换成数字。
为什么要转换?
因为 CSV 文件里的内容有时看起来是数字,但读入 Python 后可能被当成文本。
如果电价列不是数字,后面计算最高、最低、平均电价时,就可能出错。
所以在正式统计前,先确认它是数字,是一个比较好的习惯。
9. 打印原始电价数据
print(df)
这行代码会把表格打印出来。
你会看到类似结果:
time price_yuan_per_kwh0 00:00 0.321 04:00 0.352 08:00 0.683 10:00 0.824 12:00 0.955 14:00 0.926 16:00 0.787 18:00 0.888 20:00 0.759 22:00 0.45
左边的 0、1、2、3 是行号。
真正的数据是 time 和 price_yuan_per_kwh 两列。
10. 计算最高、最低、平均电价
max_price = df["price_yuan_per_kwh"].max()min_price = df["price_yuan_per_kwh"].min()avg_price = df["price_yuan_per_kwh"].mean()
这三行代码分别表示:
从 price_yuan_per_kwh 这一列里找最高电价。
从 price_yuan_per_kwh 这一列里找最低电价。
计算 price_yuan_per_kwh 这一列的平均值。
这就是 Pandas 非常方便的地方。
你不用自己一条一条手工算。
只要指定列名,就可以直接统计。
11. 筛选高价时段
high_price_df = df[df["price_yuan_per_kwh"] > 0.80]
这行代码的意思是:
从整张表里筛选出 price_yuan_per_kwh 大于 0.80 的行。
在本案例中,电价大于 0.80 元/kWh 的时段会被筛选出来。
注意:
这里的 0.80 只是教学用阈值。
真实业务中,什么算“高价”,要结合具体省份、具体电价类型、具体用户场景、历史价格水平来判断,不能简单套用。
12. 绘制电价趋势图
plt.plot( df["time"], df["price_yuan_per_kwh"], marker="o")
这段代码表示:
横轴使用 time。
纵轴使用 price_yuan_per_kwh。
marker="o" 表示每个数据点用圆点标出来。
下面几行代码是给图表加标题和坐标轴名称:
plt.title("Electricity Price Trend")plt.xlabel("Time")plt.ylabel("Price (Yuan/kWh)")
这里标题使用英文,是为了尽量避免部分电脑出现 Matplotlib 中文字体乱码。
后面我们会专门讲如何设置中文字体。
13. 保存图片
plt.savefig(chart_file, dpi=150)
这行代码会把图表保存为:
price_trend.png
也就是说,代码运行结束后,你的代码文件夹里会多出一张图片。
这张图片就是本章的电价趋势图。
运行结果说明
运行代码后,你大概率会看到类似输出:
=== Python电力交易第3章:读取电价数据并绘制趋势图 ===未发现 price_data.csv,已自动创建教学用模拟数据文件。原始电价数据: time price_yuan_per_kwh0 00:00 0.321 04:00 0.352 08:00 0.683 10:00 0.824 12:00 0.955 14:00 0.926 16:00 0.787 18:00 0.888 20:00 0.759 22:00 0.45电价统计结果:最高电价:0.95 元/kWh最低电价:0.32 元/kWh平均电价:0.69 元/kWh高价时段: time price_yuan_per_kwh3 10:00 0.824 12:00 0.955 14:00 0.927 18:00 0.88电价趋势图已保存为:price_trend.png恭喜你,已经成功读取电价数据,并绘制出第一张电价趋势图!
同时,你会看到一个图表窗口弹出。
代码所在文件夹中,也会出现两个文件:
price_data.csvprice_trend.png
这说明你已经完成了本章的目标:
读取电价数据。
打印电价表。
统计最高、最低、平均电价。
筛选高价时段。
画出电价趋势图。
对于零基础读者来说,这已经是非常关键的一步。
因为后面所有复杂分析,都是从这些基础动作扩展出来的。
本章小练习
练习1:修改高价判断阈值
把代码中的:
high_price_df = df[df["price_yuan_per_kwh"] > 0.80]
改成:
high_price_df = df[df["price_yuan_per_kwh"] > 0.70]
重新运行代码。
观察高价时段数量是否变多。
思考:
为什么阈值降低后,高价时段会变多?
练习2:新增两个电价时段
打开自动生成的 price_data.csv,在最后新增两行:
23:00,0.4023:30,0.36
重新运行代码。
观察:
最低电价有没有变化?
平均电价有没有变化?
图表横轴有没有增加新的时点?
注意:
这里不建议写 24:00。
因为在本章里时间只是文本,写 24:00 不一定会立刻报错;但后续如果用 Python 做正式时间处理,24:00 很可能带来解析问题。
练习3:找出低价时段
仿照高价时段筛选代码,新增一段代码,筛选电价低于 0.50 的时段。
提示:
可以参考:
low_price_df = df[df["price_yuan_per_kwh"] < 0.50]print("\n低价时段:")print(low_price_df)
练习4:思考一个业务问题
如果你看到某一天电价在 12:00 和 14:00 明显偏高,你会进一步想查哪些信息?
可以从这些角度思考:
这是真实电价,还是教学模拟数据?
这是分时电价、零售电价,还是现货价格?
高价是否和系统负荷高有关?
高价是否和天气、生产活动、新能源出力有关?
用户是否刚好在高价时段用电较多?
如果是储能场景,是否存在低价充电、高价放电的分析价值?
如果你已经跑通本章代码,并且在文件夹里看到了:
price_data.csv
price_trend.png
欢迎在评论区回复:
趋势图已跑通
如果你遇到报错,也可以直接留言:
ModuleNotFoundError
ValueError
FileNotFoundError
IndentationError
后面我会把大家遇到的问题整理成一篇:
《Python 电力交易新手常见报错手册》
如果你想直接领取本章配套资料,可以私信公众号关键词:
电力Python03
领取《Python电力交易》第3章入门资料包,包括:
建议使用顺序:
先看运行说明 → 跑通完整代码 → 查看生成的趋势图 → 对照语法速查表理解代码 → 回到评论区回复“趋势图已跑通”。
也欢迎你在评论区回答:
你最想优先学习哪一种图表?
A. 电价趋势图
B. 负荷曲线图
C. 分时电价对比图
D. 月度电费柱状图
E. 现货价格波动图