import netCDF4 as nc import pandas as pd import numpy as np #文件读取 diri = 'D:/Science/graduation/data/result/' file = '成都平原背景.xlsx' sfile = 'cdpypre.xlsx' #输出文件 outfile = pd.ExcelWriter('D:/Science/graduation/data/result/sx成都平原背景.xlsx') #读取数据 data = pd.read_excel(diri+file,sheet_name='O3污染季节',header = 0) date = pd.read_excel(diri+sfile) #筛选掉降水量大于2mm的天数 data = data.loc[data.isin(date)].dropna() print(data)
时间: 2023-06-15 08:08:24 浏览: 107
这段代码是用来读取 netCDF4 格式文件中的数据,并进行简单的数据处理。具体来说,它使用了 pandas 库读取了两个 Excel 文件,一个是成都平原背景.xlsx,另一个是cdpypre.xlsx。然后使用 pd.ExcelWriter() 创建了一个名字为 sx成都平原背景.xlsx 的 Excel 输出文件。接着,利用 pd.read_excel() 读取了成都平原背景.xlsx 文件中 "O3污染季节" 工作表的数据,再次使用 pd.read_excel() 读取了 cdpypre.xlsx 文件中的数据。最后,它对 data 中的数据进行了筛选,把日期在 date 中的数据留下,去掉了降水量大于2mm的天数。输出了筛选后的 data 数据。
相关问题
import netCDF4 as nc import numpy as np from netCDF4 import Dataset import matplotlib.pyplot as plt from matplotlib.cm import get_cmap from matplotlib.colors import from_levels_and_colors import cartopy.crs as crs import cartopy.feature as cfeature from cartopy.feature import NaturalEarthFeature import cartopy.crs as ccrs import cartopy.feature as cfeature from wrf import (to_np, getvar, smooth2d, get_cartopy, cartopy_xlim, cartopy_ylim, latlon_coords) import warnings warnings.filterwarnings('ignore') file = 'D:/transfer/wrfout_d01_2016-03-01_00_00_00' ncfile = Dataset("D:/transfer/wrfout_d01_2016-03-01_00_00_00") dataset = nc.Dataset(file) latitude = dataset.variables['XLAT'][0][:] longitude = dataset.variables['XLONG'][0][:] co = dataset.variables['co'][1][1][:][:] co1 = getvar(ncfile, "co") cart_proj = get_cartopy(co1) plt.contourf(longitude,latitude, co, levels=38, cmap='hot',projection=cart_proj) plt.colorbar() # 创建一个投影 ax = plt.axes(projection=cart_proj) # 添加底图特征 ax.add_feature(cfeature.COASTLINE) ax.add_feature(cfeature.BORDERS) # 设置地图范围 ax.set_extent([90, 110, 0, 30],) plt.show()
以下是一个可能的代码优化方案:
1. 删除未使用的库和模块
在代码中,导入了一些未使用的库和模块,包括numpy、get_cmap、from_levels_and_colors等,可以将其删除以减少代码量。
2. 删除重复导入的库和模块
在代码中,导入了多个相同的库和模块,包括cartopy、cartopy.crs、cartopy.feature,可以将其合并为一个导入语句。
3. 优化变量的命名和赋值
在代码中,一些变量的命名不够直观,例如co、co1等,可以改为更具有描述性的名称。另外,一些变量的赋值方式可以简化为一行。
4. 简化图形绘制代码
在代码中,图形绘制的代码比较冗长,可以简化为一行或者几行,同时可以将一些公共的参数提取出来作为全局变量,以便后续的绘图。
综上所述,以下是一个可能的优化后的代码:
```
import netCDF4 as nc
import cartopy.crs as ccrs
import cartopy.feature as cfeature
from netCDF4 import Dataset
from wrf import to_np, getvar, get_cartopy
warnings.filterwarnings('ignore')
file = 'D:/transfer/wrfout_d01_2016-03-01_00_00_00'
ncfile = Dataset(file)
latitude = ncfile.variables['XLAT'][0][:]
longitude = ncfile.variables['XLONG'][0][:]
co = ncfile.variables['co'][1][1][:][:]
cart_proj = get_cartopy(getvar(ncfile, "co"))
plt.contourf(longitude, latitude, co, levels=38, cmap='hot', projection=cart_proj)
plt.colorbar()
ax = plt.axes(projection=cart_proj)
ax.set_extent([90, 110, 0, 30])
ax.add_feature(cfeature.COASTLINE)
ax.add_feature(cfeature.BORDERS)
plt.show()
```
import pandas as pd from netCDF4 import Dataset from osgeo import gdal #获取nc文件的内部信息 nc =Dataset('D:/Datasets/gdp_v200.nc') # 获取nc中所有的变量 vars=list(nc.variables.keys()) print(vars) df = pd.DataFrame() print('========') count = 0 for var in vars[:58]: #读取每个变量的值 var_data = nc.variables[var][:].data print(type(var_data)) temp = pd.DataFrame(var_data) print(temp) print(count) df = pd.concat((df, temp), axis=1) count += 1 # print(var_data) # print(var_data[0]) # print(var_data[:1]) # variable_value = var_data.ReadAsArray().flatten('c') # # df = pd .DataFrame() # #获取变量值,并按行的方式将多维数组变成一维 # variable_value = vars.ReadAsArray() .flatten('c') # #将变量和值写入到DataFrame中 # df[var] = pd.Series(variable_value) #将DataFrame中的变量值写入到test.csv中 df.to_csv('test.csv', encoding='utf-8', index=False)运行结果显示line 781, in __init__ raise ValueError("DataFrame constructor not properly called!") ValueError: DataFrame constructor not properly called!
这个错误通常是由于传递给DataFrame构造函数的参数不正确导致的。根据你提供的代码和错误信息,问题可能出在以下几个地方:
1. 可能是在读取nc文件时出错。请确保路径`D:/Datasets/gdp_v200.nc`下存在正确的nc文件,并且该文件没有任何问题。
2. 可能是在读取变量数据时出错。你可以尝试打印`var_data`的值以查看是否正确读取到了变量数据。
3. 可能是在将读取到的变量数据转换为DataFrame时出错。请确保`var_data`的数据类型正确,并且没有任何问题。
4. 可能是在将多个DataFrame合并为一个DataFrame时出错。请确保每个DataFrame的列数相同,并且没有任何问题。
请检查以上几个方面,看看是否有错误或者遗漏的地方。如果问题仍然存在,请提供更多的代码和详细的错误信息,以便我能够更好地帮助你解决问题。
阅读全文