批量获取气象数据并导入Excel的方法咨询
加拿大环境部气象数据批量获取与Excel导入方案
一、批量获取多年逐小时数据
1. 官方“获取更多数据”板块批量下载
这是最便捷的官方途径,无需按月操作:
- 进入该板块后,选择Hourly Data(逐小时数据)入口;
- 通过站点名称、省份、坐标或直接输入站点ID(可从历史数据搜索页的站点详情中获取)定位目标站点;
- 在时间范围设置中选择需要的起始和结束年份,确认时间粒度为“Hourly”;
- 点击搜索后,选择“Download All”即可获取包含所选时间段所有逐小时数据的压缩包,解压后得到对应年份的数据集文件。
2. 脚本自动化下载(适合技术用户)
如果需要更灵活的筛选或批量处理,可使用Python脚本构造请求自动下载并合并:
- 先获取目标站点的
stationID(从历史数据页面的站点信息中提取); - 基础下载脚本示例:
import requests import os station_id = "YOUR_STATION_ID" start_year = 2010 end_year = 2023 save_dir = "hourly_weather_data" os.makedirs(save_dir, exist_ok=True) for year in range(start_year, end_year + 1): for month in range(1, 13): csv_url = f"https://climate.weather.gc.ca/climate_data/bulk_data_e.html?format=csv&stationID={station_id}&Year={year}&Month={month}&Day=1&timeframe=1&submit=Download+Data" resp = requests.get(csv_url) if resp.status_code == 200: save_path = os.path.join(save_dir, f"{year}_{month}.csv") with open(save_path, "wb") as f: f.write(resp.content) print(f"Downloaded {year}-{month} data")
- 合并所有CSV文件为单个数据集:
import pandas as pd import glob all_csvs = glob.glob(os.path.join(save_dir, "*.csv")) df_collection = [] for csv in all_csvs: # 跳过CSV开头的15行元数据(根据实际文件调整行数) df = pd.read_csv(csv, skiprows=15) df_collection.append(df) combined_data = pd.concat(df_collection, ignore_index=True) combined_data.to_csv("full_hourly_data.csv", index=False)
二、“获取更多数据”板块完整操作流程
- 进入板块后,定位Historical Climate Data分类下的Hourly Data;
- 搜索站点:支持按名称、省份、经纬度或站点ID搜索,选中目标站点后进入数据选择界面;
- 设置时间范围:直接输入起始和结束年份,选择“Hourly”作为数据粒度;
- 下载数据:点击“Search”后,页面会列出所有可用的数据文件,点击“Download All”即可批量获取,部分站点可能存在数据缺失,页面会标注可用时间范围。
三、Excel导入最优方法
1. 单CSV文件导入
- 打开Excel,切换到数据选项卡 → 选择自文本/CSV;
- 选中目标CSV文件,在导入向导中确认分隔符为逗号,若文件开头有元数据行,设置“跳过行数”为对应数值(通常15行),预览无误后点击加载。
2. 批量合并多个CSV文件(推荐Power Query)
- 打开Excel,点击数据 → 获取数据 → 从文件 → 从文件夹;
- 选择存放CSV文件的文件夹,点击确定后进入文件列表界面;
- 点击编辑进入Power Query编辑器,添加自定义列,输入公式:
Table.FromCsv([Content], [Delimiter=",", SkipLines=15])(跳过元数据行); - 展开自定义列,清理不必要的字段后,点击关闭并上载,即可将所有CSV数据合并到单个工作表中。
3. VBA脚本批量导入(适合熟悉VBA的用户)
Sub MergeWeatherCSVs() Dim targetWs As Worksheet Dim csvFolder As String Dim csvFile As String Dim lastRow As Long Set targetWs = ThisWorkbook.Sheets.Add targetWs.Name = "CombinedWeatherData" csvFolder = "C:\your\csv\directory\" ' 替换为你的CSV文件夹路径 csvFile = Dir(csvFolder & "*.csv") Do While csvFile <> "" With targetWs.QueryTables.Add(Connection:="TEXT;" & csvFolder & csvFile, Destination:=targetWs.Cells(lastRow + 1, 1)) .TextFileParseType = xlDelimited .TextFileCommaDelimiter = True .TextFileSkipRows = 15 ' 跳过元数据行 .Refresh End With lastRow = targetWs.Cells(targetWs.Rows.Count, "A").End(xlUp).Row csvFile = Dir Loop End Sub
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

