值错误:数据帧的真实性不明确将掩码数组转换为数据帧

问题描述

我正在尝试使用 seaborn 模块和 linesplot 函数创建时间序列。对于绘图,我从两个 netCDF4 文件提取了变量作为 3D 掩码数组。我提取的变量称为 fgco2。我已经找到了每个数据集的年度平均值并添加到了熊猫数据框。

我的目标是将这些绘制为带有两组数据的误差带的线图,但我的代码第 58 行收到以下错误消息:

hindcast= sns.load_dataset(df_melt)
ValueError: The truth value of a DataFrame is ambiguous. Use a.empty,a.bool(),a.item(),a.any() or a.all().

我认为此错误是由于数据集中包含 NaN 值的掩码数组造成的,但我不确定。任何有关如何解决此问题的建议将不胜感激。完整代码如下:

import numpy as np
import matplotlib.pyplot as plt
from netCDF4 import Dataset
import pandas as pd

#extracting values for observations
filename = 'C:/Users/efnel/Historical data analysis/fgco2_obs_ymean.nc'
ds_co2obs = Dataset(filename)

fgco2_obs_var = ds_co2obs.variables['fgco2'][:]

#fixing units to be Pg C yr-1 from mol/m2/yr
fgco2_obs_PG = ((fgco2_obs_var* 44.01) * 49306000) / 10**9

#finding global average of carbon flux
global_average= np.mean(fgco2_obs_PG[:,:,:],axis=(1,2))
annual_fgco2 = np.reshape(global_average,(33))

#Finding anomalies to the mean,positive values show weakening and negative show strengthening.
av=np.mean(annual_fgco2[0:33])
obs_anom = annual_fgco2 - av


#extracting data from model
filename_2 = 'C:/Users/efnel/Historical data analysis/fgco2_hist_ymean.nc'
ds_co2mod = Dataset(filename_2)

fgco2_mod_var = ds_co2mod.variables['fgco2'][:]
#changing units form kg/m2/s to Pg/yr
fgco2_mod_inv = ((fgco2_mod_var * -1 * 31557600) * 1000 * 49306000)/ 10**9
#49306000 is m2 area of 16 and 17 biomes combined,taken from Mckinley 2016

#finding global average carbon flux in southern ocean below polar front
global_average_mod= np.mean(fgco2_mod_inv[:,2))
annual_fgco2_mod = np.reshape(global_average_mod,(33))

#finding anomalies from the mean for model hindcast
av_2=np.mean(annual_fgco2_mod[0:33])
mod_anom = annual_fgco2_mod - av_2

#setting year range for plot
x = np.arange(1982,2015,1)

#transforming numpy arrays into dataframe
df = pd.DataFrame(x,columns=['Year'])

df['Observed Anomalies'] = np.ma.filled(obs_anom)
df['Model Anomalies'] = np.ma.filled(mod_anom)

print(df) #used to check significant figures of data
df_melt = pd.melt(df,id_vars=['Year'],value_vars=['Observed Anomalies','Model Anomalies'])
                  
 #Import additional working libraries
import seaborn as sns
# Linear correlation plot
sns.set_theme(style="darkgrid")
hindcast= sns.load_dataset(df_melt)
    sns.lineplot(x="Year",y="value",hue="variable",data=hindcast)

plt.savefig('fgco2_hindcast_anom.png')
 

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...