怎么用Python实现降雨量统计分析
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,本篇内容介绍了"怎么用Python实现降雨量统计分析"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!先
千家信息网最后更新 2025年12月02日怎么用Python实现降雨量统计分析
本篇内容介绍了"怎么用Python实现降雨量统计分析"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
先看看需求吧:
主要就是要根据左侧的表格自动生成右侧的Word统计报告,实际的各种可能性情况远比图中展示的要更加复杂。
好了,直接开始干代码吧!
1数据读取
import pandas as pddf = pd.read_csv("11月份数据.csv", encoding='gbk')# 当前统计月份month = 11df = df.query('月份==@month')df.head(10)
2异常数据过滤
查看缺失值数量:
pd.isnull(df).sum()
结果:
区域 0月份 0降雨量(mm) 0降雨距平(mm) 1观测站 0dtype: int64
仅一个缺失值数据,可直接删除:
df.dropna(inplace=True)
3计算观测站降雨量相对往年的变化
计算降雨量比往年高,跟往年比无变化,以及比往年低的次数分别是多少:
rainfall_high = df.eval('`降雨距平(mm)` > 0').value_counts().get(True, 0)rainfall_equal = df.eval('`降雨距平(mm)` == 0').value_counts().get(True, 0)rainfall_low = df.eval('`降雨距平(mm)` < 0').value_counts().get(True, 0)print(rainfall_high, rainfall_equal, rainfall_low)13 1 18上面的结果中rainfall_high表示降雨量比往年平均水平高的次数,rainfall_equal表示降雨量比往年平均水平持平的次数,rainfall_low表示降雨量比往年平均水平低的次数。
于是分情况讨论生成第一段的报告:
p1 = f"{month}月份"if rainfall_low == 0 or rainfall_high == 0: if rainfall_equal != 0: p1 += f"除{rainfall_equal}个观测站降雨量较往年无变化外," if rainfall_high == 0: p1 += f"各气象观测站降雨量较往年均偏低。" elif rainfall_low == 0: p1 += f"各气象观测站降雨量较往年均偏高。"else: # 10%以内差异认为是持平 if rainfall_high > rainfall_low*1.1: p1 += f"大部分气象观测站降雨量较往年偏高。" elif rainfall_low > rainfall_high*1.1: p1 += f"大部分气象观测站降雨量较往年偏低。" else: p1 += f"各气象观测站降雨量较往年整体持平。"p1结果:
'11月份大部分气象观测站降雨量较往年偏低。'
4计算各区域降雨量的极值
再生成第二段的报告:
p2 = ""t = df['降雨量(mm)']p2 += f"各区域降雨量在{t.min()}~{t.max()}mm之间,其中{df.loc[t.argmax(), '区域']}区域的降雨量最大,为{t.max()}mm。"p2结果:
'各区域降雨量在0.0~16.0mm之间,其中51a45区域的降雨量最大,为16.0mm。'
5分观测站统计
让我脑袋疼的地方就是从这里的代码开始的,后面还有更复杂的需求就不公布了。
对每个观测站分别统计哪些区域偏高,哪些区域持平,哪些区域偏低:
p3s = []for station, tmp in df.groupby('观测站'): t = tmp['降雨量(mm)'] p3 = f"各区域降雨量在{t.min()}~{t.max()}mm之间," rainfall_high_mask = tmp.eval('`降雨距平(mm)` > 0') rainfall_equal_mask = tmp.eval('`降雨距平(mm)` == 0') rainfall_low_mask = tmp.eval('`降雨距平(mm)` < 0') rainfall_high = rainfall_high_mask.value_counts().get(True, 0) rainfall_equal = rainfall_equal_mask.value_counts().get(True, 0) rainfall_low = rainfall_low_mask.value_counts().get(True, 0)# print(rainfall_high, rainfall_equal, rainfall_low) if rainfall_low == 0 or rainfall_high == 0: if rainfall_equal != 0: p3 += '除' p3 += '、'.join(tmp.loc[rainfall_equal_mask, '区域']+'区域') p3 += "降雨量较往年无变化外," if rainfall_high == 0: p3 += f"各区域降雨量均较往年偏低" elif rainfall_low == 0: p3 += f"各区域降雨量均较往年偏高" t = tmp['降雨距平(mm)'].abs() p3 += f"{t.min()}~{t.max()}mm;" else: if rainfall_equal != 0: p3 += '除' p3 += '、'.join(tmp.loc[rainfall_equal_mask, '区域']+'区域') p3 += "降雨量较往年无变化," # 10%以内差异认为是持平 if rainfall_high > rainfall_low*1.1: if rainfall_equal == 0: p3 += '除' p3 += '、'.join(tmp.loc[rainfall_low_mask, '区域']+'区域') p3 += "降雨量较往年偏低" t = tmp.loc[rainfall_low_mask, '降雨距平(mm)'].abs() if t.shape[0] > 1: p3 += f"{t.min()}~{t.max()}mm" else: p3 += f"{t.min()}mm" p3 += "外," t = tmp.loc[rainfall_high_mask, '降雨距平(mm)'].abs() p3 += f"其余各区域降雨量较往年偏高{t.min()}~{t.max()}mm;" elif rainfall_low > rainfall_high*1.1: if rainfall_equal == 0: p3 += '除' p3 += '、'.join(tmp.loc[rainfall_high_mask, '区域']+'区域') p3 += "降雨量较往年偏高" t = tmp.loc[rainfall_high_mask, '降雨距平(mm)'].abs() if t.shape[0] > 1: p3 += f"{t.min()}~{t.max()}mm" else: p3 += f"{t.min()}mm" p3 += "外," t = tmp.loc[rainfall_low_mask, '降雨距平(mm)'].abs() p3 += f"其余各区域降雨量较往年偏低{t.min()}~{t.max()}mm;" else: if rainfall_equal != 0: p3 = p3[:-1]+'外,' p3 += f"各区域降雨量较往年偏高和偏低的数量持平,其中" p3 += '、'.join(tmp.loc[rainfall_low_mask, '区域']+'区域') p3 += "降雨量较往年偏低" t = tmp.loc[rainfall_low_mask, '降雨距平(mm)'].abs() if t.shape[0] > 1: p3 += f"{t.min()}~{t.max()}mm," else: p3 += f"{t.min()}mm," p3 += '、'.join(tmp.loc[rainfall_high_mask, '区域']+'区域') p3 += "降雨量较往年偏高" t = tmp.loc[rainfall_high_mask, '降雨距平(mm)'].abs() if t.shape[0] > 1: p3 += f"{t.min()}~{t.max()}mm;" else: p3 += f"{t.min()}mm;" p3s.append([station, p3])p3s[-1][-1] = p3s[-1][-1][:-1]+"。"p3s
6将组织好的文本写入到word中
Word模板文件docxtemplate.docx的内容:
一、{ { month }}月各气象观测站降雨量实况(一)降水{ { p1 }}{ { p2 }}{%p for station,p3 in p3s %}{ { station }}:{ { p3 }}{%p endfor %}即:
Python渲染代码:
from docxtpl import DocxTemplatetpl = DocxTemplate("docxtemplate.docx")context = { 'month': month, 'p1': p1, 'p2': p2, 'p3s': p3s,}tpl.render(context)tpl.save("11月降雨量报告.docx")"怎么用Python实现降雨量统计分析"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
降雨
降雨量
区域
观测站
观测
气象
统计
月份
报告
数据
次数
结果
之间
代码
内容
大部分
情况
水平
变化
生成
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
政务云数据库包括那些
万得数据库首页怎么搜数据啊
西安华为软件开发面试
怎么下载网络安全证书过期
his数据库网站
数据库有 hbes
国际的外贸电子商务网站服务器
思科网络技术学院网络课程
软件开发的收费依据
北京电机维修数据库
抢房软件开发
青少年网络安全试题知识
华硕路由器搭建服务器
江门卡卡网络技术有限公司
华为云DBS数据库
奥克斯电力事业部软件开发岗
空间数据库引擎
网络安全运维没文化
丁甲网络技术
四会网络安全
计算机网上服务器价格
sql 创建数据库代码
电脑上装管家婆要删电脑里数据库
网络安全保护费
网络安全知识答题工作总结
php 服务器安全问题
excel归属地数据库
北京清能互联网科技公司
数据库如何代码建表
微电子软件开发项目