Python报错:checknull()不接受关键字参数 求技术解决方案
问题描述
这段代码上月运行完全正常,如今执行相同代码却出现报错。我尝试查找该错误的解决方案但未找到答案,程序用于从URL读取ERA5气象数据并将其导入新的DataFrame中,无法理解checknull()的含义。
代码
import os os.environ["PROJ_LIB"] = 'C:\\Users\\Yury\\anaconda3\\Library\\share' from sys import exit import netCDF4 as nc4 from netCDF4 import Dataset import numpy as np import matplotlib as m import matplotlib.pyplot as plt #from mpl_toolkits.basemap import Basemap, cm import datetime from datetime import datetime import pandas as pd import xarray as xr import cartopy.crs as ccrs import math #import cdstoolbox as ct import bottleneck as bn from mpl_toolkits.basemap import Basemap import cdsapi from matplotlib.pyplot import figure import cartopy.feature as cfeature import time import calendar # ----------------------------------------------------------------------------------------------------------- # # ----------------------------------------------------------------------------------------------------------- #setx ECCODES_DEFINITION_PATH "C:\\Users\\U321103\\Anaconda3\\envs\\Maps2\\Library\\share\\eccodes\\definitions" # copy setx... in command prompt in C:\\Users\\U321103 #!/usr/bin/env python3 c = cdsapi.Client() url = c.retrieve( 'reanalysis-era5-single-levels-monthly-means', { 'product_type': 'monthly_averaged_reanalysis', 'format': 'grib', 'variable': ['Mean sea level pressure'], 'year': ['1992','1993','1994','1995','1996','1997','1998','1999','2000','2001','2002','2003','2004','2005','2006', '2007','2008','2009','2010','2011','2012','2013','2014','2015','2016','2017','2018','2019','2020','2021','2022'], 'month': ['01','02','03','04','05','06','07','08','09','10','11','12'], # 'month': '12', # 'day': '01', 'time': ['00:00'], 'grid': [0.25, 0.25], # GRID = 0.5 TO MATCH VORTEX ? 'area': [65.00, -140.00, 15.00, -53.00], }, "C:\\Users\\U321103\\.spyder-py3\\ERA5_MAPPING\\mean_sea_level_pressure") path = "C:\\Users\\U321103\\.spyder-py3\\ERA5_MAPPING\\mean_sea_level_pressure" ds = xr.load_dataset(path, engine='cfgrib') exit()
错误信息
runfile('//porfiler03.ar.local/gtdshare/GOALS_2022/WeatherTypes/ERA5_Get_MSLP_USA_WORKING_MONTHLY.py', wdir='//porfiler03.ar.local/gtdshare/GOALS_2022/WeatherTypes') 2023-01-16 18:09:51,830 INFO Welcome to the CDS 2023-01-16 18:09:51,831 INFO Sending request to https://cds.climate.copernicus.eu/api/v2/resources/reanalysis-era5-single-levels-monthly-means 2023-01-16 18:09:52,149 INFO Request is completed 2023-01-16 18:09:52,150 INFO Downloading https://download-0001-clone.copernicus-climate.eu/cache-compute-0001/cache/data0/adaptor.mars.internal-1673912965.1298344-26515-5-eb9a349c-be6c-4e0c-b3fb-79e0d436a411.grib to C:\Users\U321103\.spyder-py3\ERA5_MAPPING\mean_sea_level_pressure (49.9M) 2023-01-16 18:09:59,400 INFO Download rate 6.9M/s 2023-01-16 18:09:59,401 WARNING Ignoring index file 'C:\\Users\\U321103\\.spyder-py3\\ERA5_MAPPING\\mean_sea_level_pressure.923a8.idx' older than GRIB file Traceback (most recent call last): File "C:\Users\U321103\Anaconda3\envs\Maps2\lib\site-packages\xarray\conventions.py", line 523, in decode_cf_variables new_vars[k] = decode_cf_variable( File "C:\Users\U321103\Anaconda3\envs\Maps2\lib\site-packages\xarray\conventions.py", line 364, in decode_cf_variable var = coder.decode(var, name=name) File "C:\Users\U321103\Anaconda3\envs\Maps2\lib\site-packages\xarray\coding\variables.py", line 189, in decode encoded_fill_values = { File "C:\Users\U321103\Anaconda3\envs\Maps2\lib\site-packages\xarray\coding\variables.py", line 193, in <setcomp> if not pd.isnull(fv) File "C:\Users\U321103\Anaconda3\envs\Maps2\lib\site-packages\pandas\core\dtypes\missing.py", line 185, in isna return _isna(obj) File "C:\Users\U321103\Anaconda3\envs\Maps2\lib\site-packages\pandas\core\dtypes\missing.py", line 208, in _isna return libmissing.checknull(obj, inf_as_na=inf_as_na) TypeError: checknull() takes no keyword arguments During handling of the above exception, another exception occurred: Traceback (most recent call last): File "C:\Users\U321103\Anaconda3\envs\Maps2\lib\site-packages\spyder_kernels\py3compat.py", line 356, in compat_exec exec(code, globals, locals) File "\\porfiler03.ar.local\gtdshare\goals_2022\weathertypes\era5_get_mslp_usa_working_monthly.py", line 58, in <module> ds = xr.load_dataset(path, engine='cfgrib') File "C:\Users\U321103\Anaconda3\envs\Maps2\lib\site-packages\xarray\backends\api.py", line 258, in load_dataset object. File "C:\Users\U321103\Anaconda3\envs\Maps2\lib\site-packages\xarray\backends\api.py", line 545, in open_dataset ds = _dataset_from_backend_dataset( File "C:\Users\U321103\Anaconda3\envs\Maps2\lib\site-packages\xarray\backends\api.py", line 451, in maybe_decode_store specified). If None (default), attempt to decode times to File "C:\Users\U321103\Anaconda3\envs\Maps2\lib\site-packages\xarray\conventions.py", line 659, in decode_cf vars, attrs, coord_names = decode_cf_variables( File "C:\Users\U321103\Anaconda3\envs\Maps2\lib\site-packages\xarray\conventions.py", line 534, in decode_cf_variables raise type(e)(f"Failed to decode variable {k!r}: {e}") TypeError: Failed to decode variable 'number': checknull() takes no keyword arguments
解决方案
这个错误源于pandas版本不兼容:新版本的pandas在调用底层libmissing.checknull()函数时传入了inf_as_na关键字参数,但你当前环境里的旧版pandas不支持这个参数,导致报错。checknull()是pandas内部用来检测空值的函数,不是你代码直接调用的。
解决方法二选一:
- 降级pandas到兼容版本:
先查看当前pandas版本:
然后降级到1.3.5这类稳定兼容版本:pip show pandaspip install pandas==1.3.5 - 升级相关依赖:
将xarray、cfgrib升级到最新版本,确保它们和当前pandas版本匹配:pip install --upgrade xarray cfgrib
内容的提问来源于stack exchange,提问作者user2100039
相关产品推荐
相关产品推荐

