You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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内部用来检测空值的函数,不是你代码直接调用的。

解决方法二选一:

  1. 降级pandas到兼容版本:
    先查看当前pandas版本:
    pip show pandas
    
    然后降级到1.3.5这类稳定兼容版本:
    pip install pandas==1.3.5
    
  2. 升级相关依赖:
    将xarray、cfgrib升级到最新版本,确保它们和当前pandas版本匹配:
    pip install --upgrade xarray cfgrib
    

内容的提问来源于stack exchange,提问作者user2100039

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 07:55:18