首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用xarray将netcdf文件的一部分转换为数据帧

问使用xarray将netcdf文件的一部分转换为数据帧
EN

Stack Overflow用户
提问于 2021-02-12 17:15:04
回答 1查看 36关注 0票数 0

我目前正在尝试将netcdf文件转换为dataframe。我使用的是以下数据:https://www.ufz.de/export/data/2/248980_SMI_SM_L02_Oberboden_monatlich_1951-2020_inv.nc

该文件包含以下信息:

int32时间(时间) standard_name: time long_name:时间单位:天数自1951-01-16 00:00:00日历:标准轴:T无限维度:时间当前形状= (840,)填充int32东(东)轴:X无限维度:当前形状= (175,)填充int32北向轴:Y无限维度:当前形状= (225,)填充netCDF4.Variable‘> float32 SMI(时间,北,东) long_name:土壤湿度指数单位:- _FillValue:-9999.0 missing_value:-9999.0无限维度:时间当前形状=(840225,175)填充netCDF4.Variable’> float64 lat(北,东) long_name:纬度单位: degrees_north _FillValue:-9999.0 missing_value:-9999.0无限维度:当前形状= (225,_netCDF4.Variable‘> float64 lon(北距,东距) long_name:经度单位: degrees_east _FillValue:-9999.0 missing_value:-9999.0无限尺寸:当前形状= (225,175)填充

我的目标是过滤SMI值(还包含有关时间、北距、东距的信息),并将它们转换为数据帧。

我当前的代码如下:

代码语言:javascript
复制
import os
from matplotlib import pyplot as plt
import pandas as pd
import netCDF4
import numpy as np
import xarray as xr

# Define directory
os.chdir('C:/Users/Documents/Project/ClimateRisks')

dp = xr.open_dataset('SMI_Oberboden.nc')
dp = dp.SMI


m2 = dp.to_dataframe()
m2 = m2.dropna()
print(m2.head(15))

结果如下:

代码语言:javascript
复制
                                  SMI
time       northing easting          
1951-01-16 5238000  4360000  0.445849
                    4364000  0.473440
                    4368000  0.309218
           5242000  4364000  0.365326
                    4368000  0.426184
                    4372000  0.344188
                    4376000  0.284556
           5246000  4364000  0.390772
                    4368000  0.521810
                    4372000  0.586828
                    4376000  0.344797
                    4380000  0.394820
           5250000  4356000  0.470163
                    4360000  0.619951
                    4364000  0.540267

问题是最终的数据帧只有一列(SMI),而其余的(时间、北距、东距)不被视为列。我的目标是最终拥有四列(time、northing、easting、SMI)。由于我还是个新手,我将非常感谢您的帮助。

EN

回答 1

Stack Overflow用户

发布于 2021-02-12 17:30:56

您只需重置索引即可。因此,将倒数第二行改为:

代码语言:javascript
复制
m2 = m2.dropna().reset_index()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66169106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档