【数据处理】把记录了网格点位的DataFrame还原成网格形式(增加了数据归一化)

DataFrame存储的网格数据转换成数组或Tensor 存储(xr.Dataset 用法学习)

NOAA 下载.csv 模型数据 转换成 Tensor 处理

(1) 从NOAA 下载需要的数据
(2) .csv数据格式转换
(3) 保存成.npy或.nc 数据

NOAA下载数据

通常可以通过以下链接(NOAA)下载需要的气象数据/海洋数据等
NWW3 模型数据
台风天海洋数据

.csv 格式数据转换成 一般气象数据格式或array

import torch
import numpy  as np
import pandas as pd
import xarray as xr
# 读取数据
df = pd.read_csv('\data_process\2021.csv')
# 检查并删除多余的单位行
df = df.drop(index=(df.loc[(df['time']=='UTC')].index))
df = df.drop(index=(df.loc[(df['time']=='time')].index))
# 先检查数据,将所有的nan替换成0
df = df.fillna(0)

# 定义提取的列名(需要使用的变量)
"""
Tdir:peak wave direction, degrees
Tper:peak wave period, second
Thgt:significant wave height, meters
sdir:swell peak wave direction, degrees
sper:swell peak wave period, seconds
shgt:swell significant wave height, meters
wdir:wind peak wave direction, degrees
wper:wind peak wave period, seconds
whgt:wind significant wave height, meters
"""
col_list = ['time','latitude','longitude','Thgt']
df = df.loc[:,col_list]
# 把经纬度中的字符串信息转为数字
df['latitude'] = df['latitude'].apply(pd.to_numeric, errors='coerce')
df['longitude'] = df['longitude'].apply(pd.to_numeric, errors='coerce')
df['Thgt'] = df['Thgt'].apply(pd.to_numeric, errors='coerce')

# 丢掉重复项
df=df.drop_duplicates()

# 对数据集进行归一化处理
Max = np.max(df['Thgt'])
Min = np.min(df['Thgt'])
df['Thgt'] = (df['Thgt'] - Min)/(Max - Min)

# 创建网格(T×lat×lon)
df_rows = pd.DataFrame(df).set_index(['time','latitude','longitude'])
ds = xr.Dataset.from_dataframe(df_rows)
# 直接存储成.nc 文件
ds.to_netcdf('tght_2011.nc')
'''
# 检查数据是否正确转换,可以绘制图片
# 快速绘图
ds['Thgt'][1].plot.pcolormesh()
'''
print(ds)
"""
xr.Dataset 格式数据转换成多维数组
"""
# 计算张量的维度
z = len(ds['time'])
x = len(ds['latitude'])
y = len(ds['longitude'])
# 数据读入numpy.array
arr = [];
for item in range(z):
    temp = ds['Thgt'][item].values
    temp.swapaxes(1,0)
    temp.flatten()
    arr  = np.append(arr,temp)
# 数据转成需要的维度
arr.resize(z,x,y)   
# 保存数据
np.save('2021_series.npy',arr)
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值