Python实战:5分钟搞定NCDC气象数据批量转换(ISD-Lite转Excel保姆级教程)

中国全国地面站点数据(1981-2010)、月平均气象、月平均降水、月平均相对湿度、月最大降水、月最高温度最低温度、月最高温平均值最低温平均值、高低温站点基础数据,气候数据 中国全国地面站点数据(1981-2010)、月平均气象、月平均降水、月平均相对湿度、月最大降水、月最高温度最低温度、月最高温平均值最低温平均值、高低温站点基础数据 b_china_mon_avg_data_pressure月平均气象 b_china_mon_avg_data_rain月平均降水 b_china_mon_avg_data_rhu月平均相对湿度 b_china_mon_max_data_rain月最大降水 b_china_mon_max_min_data_tem月最高温度最低温度 b_china 阅读详情

Python实战:5分钟高效处理NCDC气象数据(ISD-Lite转Excel全流程解析)

气象数据分析工作中,原始数据格式转换往往是令人头疼的第一道门槛。美国国家气候数据中心(NCDC)提供的ISD-Lite格式数据虽然体积小巧,但直接阅读和分析却不太友好。本文将带你用Python快速实现批量转换,将晦涩的ISD-Lite文件转化为直观的Excel表格,整个过程只需不到5分钟即可完成配置。

1. 环境准备与数据理解

在开始转换前,我们需要先了解ISD-Lite数据的结构特点。这种格式以固定宽度空格分隔的文本文件存储,每行包含12个气象要素:

"""
列序号  要素名称        单位    换算系数  缺失值标记
-------------------------------------------------
1     年              -       1       -
2     月              -       1       -
3     日              -       1       -
4     小时            -       1       -
5     温度            ℃      10     -9999
6     露点温度        ℃      10     -9999
7     气压            hPa     10     -9999
8     风向            度       1     -9999
9     风速            m/s     10     -9999
10    云量            八分制   1     -9999
11    1小时降雨量     mm      10     -9999
12    6小时降雨量     mm      10     -9999
"""

注意:原始数据中的温度、气压等要素需要除以10才能得到实际物理值,这是ISD-Lite格式的特殊设计。

所需工具准备清单:

  • Python 3.6+ 环境
  • pandas库(数据处理核心)
  • openpyxl或xlwt库(Excel输出支持)
  • 原始ISD-Lite数据文件夹(通常按年份组织)

安装依赖只需一行命令:

pip install pandas openpyxl -i https://pypi.tuna.tsinghua.edu.cn/simple

2. 核心转换函数开发

我们构建一个智能转换函数,自动处理数据读取、格式解析、单位换算和缺失值处理全流程:

import os
import pandas as pd
import numpy as np

def isd_to_excel(input_path, output_folder='converted_excel'):
    """
    批量转换ISD-Lite文件为Excel格式
    
    参数:
        input_path: str - ISD-Lite文件或文件夹路径
        output_folder: str - 输出目录(默认当前目录下converted_excel)
    
    返回:
        error_files: list - 转换失败的文件列表
    """
    # 创建输出目录
    os.makedirs(output_folder, exist_ok=True)
    
    # 处理单个文件或批量文件
    files_to_process = []
    if os.path.isfile(input_path):
        files_to_process = [input_path]
    else:
        files_to_process = [os.path.join(input_path, f) 
                          for f in os.listdir(input_path) 
                          if not f.startswith('.')]
    
    error_files = []
    column_names = ['年','月','日','小时','温度(℃)','露点温度(℃)',
                   '气压(hPa)','风向(度)','风速(m/s)','云量(八分制)',
                   '1小时降雨量(mm)','6小时降雨量(mm)']
    
    for file in files_to_process:
        try:
            # 读取原始数据
            raw_data = pd.read_csv(file, header=None, delim_whitespace=True)
            
            # 数据清洗与转换
            df = raw_data.replace(-9999, np.nan)
            scaled_columns = [4,5,6,8,10,11]  # 需要换算的列索引
            df[scaled_columns] = df[scaled_columns] / 10
            
            # 添加时间索引
            df.columns = column_names
            df['时间'] = pd.to_datetime(df[['年','月','日','小时']])
            df.set_index('时间', inplace=True)
            df.drop(['年','月','日','小时'], axis=1, inplace=True)
            
            # 保存为Excel
            output_name = os.path.splitext(os.path.basename(file))[0] + '.xlsx'
            df.to_excel(os.path.join(output_folder, output_name))
            
        except Exception as e:
            print(f"处理失败: {file} - 错误: {str(e)}")
            error_files.append(file)
    
    return error_files

提示:函数内置了错误捕获机制,转换失败的文件会单独记录,避免因个别文件问题中断整个批处理流程。

3. 实战应用场景解析

3.1 单文件转换模式

对于只需要处理单个ISD-Lite文件的情况:

# 转换单个文件示例
input_file = "data/china_isd_lite_2020/545110-99999-2020"
isd_to_excel(input_file, output_folder="2020_stations")

3.2 批量处理年度数据

当需要处理整个年份文件夹时:

# 批量转换2020年所有站点数据
input_folder = "data/china_isd_lite_2020"
errors = isd_to_excel(input_folder)

if errors:
    print(f"有{len(errors)}个文件转换失败,请检查:")
    for err in errors:
        print(f" - {err}")
else:
    print("所有文件转换成功!")

3.3 多年度数据整合

对于跨年度的气象分析,可以先分别转换再合并:

import glob

# 转换多个年份数据
for year in range(2018, 2021):
    isd_to_excel(f"data/china_isd_lite_{year}", f"converted_{year}")

# 合并所有年份数据
all_data = pd.concat([
    pd.read_excel(f) 
    for f in glob.glob("converted_*/**.xlsx")
])
all_data.to_excel("combined_weather_2018-2020.xlsx")

4. 高级技巧与性能优化

4.1 内存优化策略

处理超大规模数据时,可采用分块处理模式:

def chunked_conversion(input_path, chunk_size=10000):
    """ 分块处理大文件 """
    reader = pd.read_csv(input_path, header=None, 
                        delim_whitespace=True, 
                        chunksize=chunk_size)
    
    for i, chunk in enumerate(reader):
        processed_chunk = process_data(chunk)  # 应用相同的处理逻辑
        if i == 0:
            processed_chunk.to_excel("output.xlsx")
        else:
            with pd.ExcelWriter("output.xlsx", mode='a') as writer:
                processed_chunk.to_excel(writer, header=False)

4.2 并行处理加速

利用多核CPU加速批量转换:

from concurrent.futures import ThreadPoolExecutor

def parallel_convert(files, workers=4):
    """ 多线程并行转换 """
    with ThreadPoolExecutor(max_workers=workers) as executor:
        results = list(executor.map(isd_to_excel, files))
    return results

4.3 数据质量检查

转换后自动生成数据质量报告:

def quality_report(df):
    """ 生成数据质量报告 """
    report = pd.DataFrame({
        '缺失值比例': df.isna().mean(),
        '平均值': df.mean(),
        '标准差': df.std(),
        '最小值': df.min(),
        '最大值': df.max()
    })
    return report.round(2)

5. 常见问题解决方案

问题1:文件编码错误

# 指定编码格式读取
raw_data = pd.read_csv(file, header=None, 
                      delim_whitespace=True,
                      encoding='latin1')

问题2:输出Excel过大

# 使用压缩格式
with pd.ExcelWriter("output.xlsx", engine='openpyxl') as writer:
    df.to_excel(writer, index=False)
    writer.book.save("compressed.xlsx", 
                    save_compressed=True)

问题3:时间格式异常

# 自定义时间解析
def parse_time(row):
    try:
        return pd.datetime(row[0], row[1], row[2], row[3])
    except:
        return pd.NaT

df['时间'] = df.apply(parse_time, axis=1)

实际项目中,建议将转换后的Excel文件与原始ISD-Lite文件分开存放,并建立文件索引数据库方便后续检索。对于长期运行的气象分析项目,可以考虑将转换流程封装为自动化脚本,配合定时任务实现数据自动更新。

2000-2020年中国地面气象数据:从NOAA到分省面板 一个预告: 最近看到Mukherjee et al. (2021, JFE) 的文章,受到了点启发,想找中国的云层数据来试试,但是没有质量特别高的数据,只好老老实实按照这篇论文中的做法从NOAA 直接下数据细数出来。 数据源为NCDC(美国国家气候数据中心,National Climatic Data Center),隶属于NOAA(美国国家海洋及大气管理局,National Oceanic and Atmospheric Administration)。 数据来自NCDC的公开FTP服务器中的 ftp 阅读详情

相关推荐

Python与Stata交互——用Python写Stata代码(os模块的应用):以清洗NCDC数据为例

用Python写Stata代码(os模块的应用)问题和基本思路问题基本思路代码和结果 Stata是计量经济学的最有名的软件,但是其自身存在一些缺陷,特别是,在清洗数据的时候,会显得比较笨重。此时,通过Python的os模块,可以自动生成Stata代码,从而提高效率。此文通过一个亲身经历的案例来对此进行说明。 问题和基本思路 问题 在用Stata清洗数据的时候,往往会碰到如下问题: 原始数据文件不一定是Stata所能识别的文件类型 这需要利用Python将Stata不可识别的文件类型转成其可识别的文件类型。

dyg66的博客 2253

NCDC气象数据的提取与处理(二):python批量转换isd-lite数据为xlsx

根据“在NCDC气象数据的提取与处理(一)” 中得到的站点列表,从全国的站点数据中筛选指定站点,并将isd-lite格式的数据转化为其他形式(本教程以转化为 .xlxs 为例)

qq_57313910的博客 1万+

中国china.zip

中国行政区划矢量图;

数据分享:中国地面气象数据包含:气温、气压、露点、风向风速、云量、降水量。

NCDC(美国国家气候数据中心,National Climatic Data Center),隶属于NOAA(美国国家海洋及大气管理局,National Oceanic and Atmospheric Administration)。文件名如“552990-99999-2000”,第1段数字是站点ID,第3段数字是年份。器 ftp://ftp.ncdc.noaa.gov/pub/data/noaa/isd-lite/,只。所用的ISD-Lite数据,只包含了部分气象要素。数据格式ISD-Lite,是。

JData_Engineer的博客 3366

isd4004.zip

isd4004 pcbi

VLOOKUP_fixed.py

VLOOKUP_fixed.py

气象数据该如何获得?如何获取某个地方的气象数据?

中国气象数据集1942-2021年 中文名称:中国气象数据集 显示时间:1942-2021年 数据精度:大多为每3小时数据,少量站点1小时数据 站点数量:最近几年400多个 气象要素:气温、气压、露点、风速风向、云量、降雨量

A18736087514的博客 1325

传媒系列深度研究:2019年中国数字读物出版行业市场研究.pdf

传媒系列深度研究:2019年中国数字读物出版行业市场研究.pdf

NCDC 提供的isd-lite格式气象数据

‌‌是指由(National Climatic Data Center,简称NCDC)提供的气象数据。NCDC隶属于(National Oceanic and Atmospheric Administration,简称NOAA)。这些数据涵盖了全球范围内的气象观测数据,包括气温、气压、露点、风向风速、云量、降水量等要素‌。

龙井的专栏 1776

YOLO26算法心电图十二导联目标检测+训练好的模型+368张数据集+pyqt可视化界面.zip

附训练好的 YOLO 权重与 PyQt 可视化检测界面,页面底部含可视化效果预览,毕设/课设开箱即用。 【数据集概况】 · 检测类别(中文):[导联I(I), 导联II(II), 导联III(III), 胸导联V1(V1), 胸导联V2(V2), 胸导联V3(V3), 胸导联V4(V4), 胸导联V5(V5), 胸导联V6(V6), 加压肢体导联aVF(aVF), 加压肢体导联aVL(aVL), 加压肢体导联aVR(aVR)] · 训练集:313 张 · 验证集:37 张 · 测试集:18 张 · 总计:368 张 该数据集聚焦于临床心电图信号的精准识别与定位,其核心检测目标为标准12导联心电图中的各个独立导联波形区域,涵盖肢体导联(I、II、III)与加压肢体导联(aVR、aVL、aVF),以及胸前导联(V1至V6),适用于心电图自动分析系统中对各导联位置的快速准确标注与分类。数据采集场景真实还原了医院心电图室或急诊监护环境下的标准心电图记录纸,波形清晰、基线稳定,具有高度临床参考价值。... 【训练曲线与评估图】 【模型训练配置】 参数 | 值 模型 | yolo26n 训练轮数 | 100 epochs 输入尺寸 | 640x640 批次大小 | 24 优化器 | auto 初始学习率 | 0.01 训练设备 【关键指标汇总】 训练了 57 个 epoch,最终轮指标: 指标 | 数值 mAP50 | **0.9708** mAP50-95 | 0.6344 Precision | 0.8990 Recall | 0.9191 train/box_loss | 1.2231 train/cls_loss | 0.9703 val/box_loss | 1.2779 val/cls_loss | 0.... 使用场景:毕业设计、课程设计、深度学习入门、工业场景落地验证。

企业级AI助手平台 开箱即用的全栈AI平台,支持多智能体协同、Supervisor模式编排、多种决策模式、RAG技术和流程编排能力 支持多厂商大模型统一接入与管理,安全可控的企业知识库与高精度检索优化

企业级AI应用开发框架,支持多厂商大模型统一接入与管理,安全可控的企业知识库与高精度检索优化能力,提供可视化流程编排、自主决策智能体与多智能体协同调度,兼容主流 Agent Skill 协议,帮助企业与开发者零门槛快速构建安全、高效、可落地的AI智能体应用与行业解决方案。

中国气象历史数据china1942_2022降水、温度、气压、风速、风向、云量,逐小时部分为逐三小时

中国历史天气实况数据 NCDC(美国国家气候数据中心,National Climatic Data Center),隶属于NOAA(美国国家海洋及大气管理局,National Oceanic and Atmospheric Administration)。包括中国区域(含港澳台)的。数据,少量站点有1小。

无极低码 1万+

基于动态窗口法DWA的机器人路径规划研究(Matlab代码实现)

内容概要:本文系统研究了基于动态窗口法(DWA)的机器人局部路径规划算法,深入剖析其在动态环境中实现自主避障与实时轨迹优化的核心机制。文章详细阐述了DWA算法的速度空间采样策略、轨迹预测模型、动力学约束处理及多目标代价函数的设计原理,并通过构建完整的Matlab仿真框架验证算法有效性。结合典型场景的仿真实验,展示了机器人在复杂障碍物环境下如何实时生成安全、平滑且符合运动学约束的最优路径,充分体现了DWA在移动机器人导航中的实用性与鲁棒性。; 适合人群:具备机器人运动规划基础知识和Matlab编程能力,从事智能移动机器人、自动驾驶或服务机器人研发的研究生、科研人员及工程技术人员。; 使用场景及目标:①深入理解DWA算法的理论基础与实现细节;②掌握机器人局部路径规划的仿真实现方法;③为实际机器人系统的导航模块开发提供可复用的算法原型与代码参考;④作为进一步研究高级导航算法(如TEB、MPC)的技术基础。; 阅读建议:建议结合提供的Matlab代码逐模块分析与调试,重点关注速度采样、轨迹积分、障碍物距离计算及代价评估等关键环节,通过调整参数在不同地图环境中进行对比实验,以深刻把握算法性能与参数之间的关系,进而提升对实时路径规划系统设计的理解与应用能力。

批量复制文件夹下的所有文件名称

免编程,三步操作

m0_58127906的博客 406

libiec61850实战:手把手教你用C语言动态获取IED设备模型(附完整代码解析)

本文详细介绍了如何使用libiec61850库通过C语言动态获取IED设备模型,包括环境配置、连接建立、模型遍历及错误处理等关键步骤。通过完整的代码示例和实战案例,帮助开发者掌握智能变电站通信中的核心技术,提升工业自动化系统的开发效率。

weixin_42519985的博客 433

TPS563201DDCR电路翻车实录:从原理图到PCB,我踩过的5个坑及补救方法

本文详细记录了使用TPS563201DDCR电源芯片设计电路时遇到的5个常见问题及解决方案,包括EN引脚配置、BST电容选型、反馈网络设计、PCB布局优化以及散热处理。通过实际案例和数据分析,帮助工程师避免类似错误,提升电源模块的可靠性和效率。

weixin_42532938的博客 528
上一篇: DeepSpeed Zero-3与low_cpu_mem_usage不可兼得?深入解析背后的技术原理与替代方案
下一篇: 别再只改ulimit了!解决Linux进程数限制必须知道的systemd用户slice配置(附最新内核版本实测)
php55
博客等级 码龄15年 51粉丝 1553原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值