csv的pandas包处理基础操作整理,以处理气象站点数据为例

news/2025/11/6 22:12:44/文章来源:https://www.cnblogs.com/MyEngine/p/19197556

处理csv文件,同样将结果保存为csv文件,只涉及数据不涉及Excel文件的格式,主要使用pandas包就足够了。以我自己的任务为主,串一串基础语句进行总结。
1、读取csv文件

import pandas as pd
import numpy as np
import os# 读取CSV文件
df = pd.read_csv(filepath_or_buffer=input_csv_path, encoding="ANSI", header=0)
"""
df:DataFrame数据
filepath_or_buffer: 文件路径
encoding:文件的编码格式,正确设置才能正确读取文件
header:文件有没有表头,默认值为0表示有表头,设置值为None表述没有表头;文件没表头时,第一行容易被错误识别为表头,处理缺少数据。
"""

2、获取数据的站点号、年和月,用于循环操作

siteNames=df['区站号'].unique()     # 只要不重复值,返回ndarray数据,纯数值容器
b = df['区站号'].nunique()         # 只要数量,返回Series数据,是带标签的一维数组,相当于dataframe的一列
c = df['区站号'].value_counts()    # 要值和计数,返回Series数据
d = df['区站号']                   # 返回Series数据,一列数据

具体的筛选和循环过程:

# 批量处理每个站点for site in siteNames:l=df['区站号'] == site     # 获取单个站点号的索引,返回Series数据,包括行号和一个bool值site_data = df[l]           # 根据索引筛选数据,返回dataFrame# 年月循环for y in site_data['年'].unique():year_data=site_data[site_data['年']==y]  # 筛选年for m in range(12):month_data=year_data[year_data['月']==m+1].copy()     # 筛选月,创建的是"视图",copy()创建副本为方便标记错误值# 具体的处理过程

3、处理过程,获取统计值


month_data = year_data[year_data['月'] == m + 1].copy()  # 筛选月
# 将第10-18列中超出范围的值设为NaN,标记错误值为Nan
cols = month_data.columns[9:18]  # 第10-18列(Python从0开始索引)
month_data[cols] = month_data[cols].apply(lambda x: x.where((x >= -500) & (x <= 500), np.nan))  # 使用apply,配合lamba函数,将范围外的值标记为Nan
l = ["平均气温(℃)", "日最高气温(℃)", "日最低气温(℃)","20-20时累计降水量(mm)", "平均地表气温(℃)","日最高地表气温(℃)", "日最低地表气温(℃)"]write_row = month_data.iloc[0:1]  # 取第一行
write_row = write_row[["区站号", "纬度", "经度", "海拔高度", '年', "月"]].copy()for c in l:if c == "平均气温(℃)":write_row["月平均气温(℃)"] = round(month_data[c].mean(), 5)      # 如果所有值都为Nan,返回值为Nan,会自动忽略Nan值(包括分母),下同elif c == "日最高气温(℃)":write_row["月最高气温(℃)"] = round(month_data[c].max(), 5)pass  # 略
newline=write_row.to_csv().replace(output_top.strip(),"").strip()+"\n"  # 这里用dataframe存储数据,然后转为csv,是为了练习dataframe

4、dataFrame数据结构的相关一些总结

import pandas as pd
# 新建DataFrame
# 方法1:直接字典新建DataFrame
df = pd.DataFrame({'气温': [25, 28, 30], # 列名:行值'降水': [0, 5, 10]
}, index=['2023-01-01', '2023-01-02', '2023-01-03'])    # 不是很懂这个索引的作用
# 方法2:从二维列表新建DataFrame
data = [['北京', 25, 0], ['上海', 28, 5], ['广州', 30, 10]]
df = pd.DataFrame(data, columns=['城市', '气温', '降水'])
# 方法3:从多个列表新建DataFrame
cities = ['北京', '上海', '广州']
temps = [25, 28, 30]
df = pd.DataFrame({'城市': cities, '气温': temps})# 列相关
# 增加列
df['年份'] = 2023
df['华氏温度'] = df['气温'] * 9/5 + 32
# 删除列
df = df.drop('华氏温度', axis=1)  # 删除单列
df = df.drop(['列1', '列2'], axis=1)  # 删除多列
# 重命名列
df = df.rename(columns={'旧名': '新名', '气温': '温度'})# 行相关
# 增加行
new_row = {'城市': '深圳', '气温': 32, '降水': 8}
df = pd.concat([df, pd.DataFrame([new_row])], ignore_index=True)
# 删除行
df = df.drop(0)  # 删除索引为0的行
df = df.drop([0, 2])  # 删除多行
# 条件删除
df = df[df['气温'] < 30]  # 删除气温>=30的行# 修改值
# 修改单个值
df.at[0, '气温'] = 26  # 索引0, 列'temperatura'
# 条件修改
df.loc[df['城市'] == '北京', '气温'] = 27
# 批量修改
df['气温'] = df['气温'] + 1  # 所有气温+1# 筛选行、列
# 选择列
df['城市']           # 单列 → Series
df[['城市', '气温']]  # 多列 → DataFrame
# 选择行
df.iloc[0]          # 按位置选择第0行,前闭后开
df.iloc[0:3]        # 前3行
df.loc['2023-01-01'] # 按索引标签选择行,前闭后闭
# 单条件筛选
hot_days = df[df['气温'] > 28]
# 多条件筛选
summer_hot = df[(df['气温'] > 28) & (df['降水'] > 0)]
# 包含查询筛选
beijing_data = df[df['城市'].str.contains('北京')]
# isin查询筛选
selected = df[df['城市'].isin(['北京', '上海'])]# 统计
df.describe()       # 数值列统计
df.info()           # 数据类型信息
df.shape            # 数据形状
df.columns          # 列名列表
df.index            # 索引信息
# 单列统计
df['气温'].mean()    # 平均值
df['气温'].max()     # 最大值
df['气温'].min()     # 最小值
df['气温'].std()     # 标准差
df['气温'].count()   # 非空数量# 文件操作
df = pd.read_csv('data.csv')     # 读取CSV
df.to_csv('output.csv')            # 保存为CSV# 数据查看
df.head(10)          # 前10行
df.tail(5)           # 后5行
df.sample(3)         # 随机3行
df.nunique()         # 每列不重复值数量

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/958148.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NOIP模拟赛20251106 T3

题目大意: 有一个长度为 \(n\) 的序列,每次你会单点修改,求每次修改完了之后的 \(f\)。 \(f\) 表示最少操作几次冒泡,使得他不降。 \(n,q \le 5 \times 10^5\) 解题思路: 考虑刻画这个东西,由于每次对于一个非前…

Tomassi计算机

请分析计算机检材,找出嫌疑人计算机主要的登录用户(答案格式:Administrator) Tomasi请分析计算机检材,嫌疑人计算机操作系统的注册所有者是?(答案格式:Administrator) Windows 用户请分析计算机检材,嫌疑人计…

团队第一次作业

软件工程第一次实践作业软件工程实践 https://edu.cnblogs.com/campus/fzu/202501SoftwareEngineering作业要求 https://edu.cnblogs.com/campus/fzu/202501SoftwareEngineering/homework/13573作业的目标 自主选题,选…

20251106周四日记

20251106周四日记昨天问D老师的特征提取很有收获,很多之前深度学习的知识想通了,结合多维度线性代数的知识。VAE Diffusion原理值得一看。 今日: 1.早上在家试衣服,中午吃完午饭等爹回来看豆子,回学校直接去实验室…

学习:初学BP

支付漏洞 例如navicat软件的官网 1.打开BP,用BP内部浏览器打开2.在进入付款界面前用BP进行拦截3.最后放行即可成功

2025年上海防水补漏TOP5最新评测:从屋顶到地下室,全场景解决

随着城市化进程加快,建筑防水补漏需求日益增长,上海作为国际化大都市,对防水工程的专业性、可靠性提出了更高要求。本榜单基于技术实力、服务覆盖、施工质量、客户口碑、资质认证五大维度,结合2024年行业数据及客户…

线段树维护区间历史信息和为例的复杂信息维护同标记下传设计技巧简记

简记线段树维护区间历史信息和为例的复杂信息维护同标记下传设计技巧并给出例题示范实现过程与代码实现示例。更新日志 2025/11/06:开工。思路 单次影响与维护信息 首先考虑每一种修改操作单次对信息的影响,特殊地,…

DFS 序

思想对于树结构,通常包括进入节点和离开节点的两次记录(即时间戳),形成一个长度为2N的序列(N为节点数)。性质子树连续性‌:同一子树的节点在DFS序中形成连续区间。例如,根节点的子树区间包含所有子节点的访问记…

重组蛋白纯化标签科普:从His到SUMO、Avi的全面解析

重组蛋白纯化标签科普:从His到SUMO、Avi的全面解析在蛋白研究与生物技术服务中,重组蛋白表达 是最核心的基础技术之一。无论是科研实验、结构分析还是功能验证,获取高纯度、高活性的蛋白是实验成功的关键。为了从复…

2025.11.6

今天上午两节课,下午开团会,然后出去吃饭

飞牛nas播放卡顿的解决方案

搭建了飞牛nas,没有使用飞牛的账号,直接用的外网IP做了端口映射,前期用的还好,突然有一天,不管是网页播放视频,还是客户端播放,都变得非常卡,几乎不能用。查看后台,网络上传只有几十KB,各个部件的资源占用都…

第三十五篇

今天是11月6号,上了数据结构和体育

使用LLaMA Factory微调模型笔记

大模型微调 1、模型微调概念 大模型微调(Fine-tuning)是指在预训练的大规模语言模型基础上,针对特定任务或领域进行进一步训练的过程。预训练模型通常是在大量通用文本数据上训练得到的,具有丰富的语言知识和理解能…

25.11.6联考题解

A 一眼题。看到位运算计数考虑拆位。 B 肯定先要期望转计数,最后除掉总方案数 \((n(s+1))^m\)。最初的想法是考虑每一个位置的情况,考虑一个位置 \(x\) 受到的影响范围是 \(\text{lowbit}(x)\) 的,注意到每个位置是…

Linux驱动学习(一)---Ubuntu-helloworld驱动编译

最近想学习Linux内核驱动开发,了解了一些关于Linux的基础知识(看的B站汪晨的视频,CSDN有个博主也总结了这个视频的内容)配置了开发环境,即在windows10上安装了VMware,在VMware里安装了Ubuntu22,前面的搞定之后,…

2025/11/3 ~ 2025/11/9 做题笔记 - sb

2025/11/6 做题笔记 #9127. Optimal Train Operation 之前遗留下来的斜率优化,因为题面是英文一直没看在每一个点修建地铁站的代价是 \(a_i\),每两个地铁站之间的代价是 \((j - i + 1)\max\limits_ {i \le k \le j}c…

利用Google Dork挖掘敏感文件setup.sh的技术解析

本文详细解析了如何使用Google Dork语法"intitle:index of setup.sh"来发现互联网上公开的敏感配置文件setup.sh,这些文件可能包含服务器配置信息、数据库凭证等关键数据,对网络安全评估具有重要意义。Goo…

11.6 程序员的修炼之道:从小工到专家 第四章 注重实效的偏执 - GENGAR

这五节内容围绕编程中的容错设计、逻辑校验和资源管理展开,核心是通过科学的编码规范与工具,尽早发现问题、降低隐患,提升程序可靠性。 按合约设计(DBC)是核心校验理念,通过前条件、后条件和类不变项明确模块的权…

2025.11.6~?

2025.11.6 复盘,上午平复了一下心情 做了P2375,首先注意题中说的数量,然后发现nxt树组指的是前缀和后缀相等,数量的话,直接用nxt递推即可,然后至于不交,就维护一直不交,然后用nxt的答案即可 做了P3426,最开始…