Python 将一系列xarray.dataarray转换为numpy数组

Python 将一系列xarray.dataarray转换为numpy数组,python,numpy,python-xarray,systemdynamics,Python,Numpy,Python Xarray,Systemdynamics,我正在使用一个名为PySD的软件包进行系统动力学建模。PySD将模型从Vensim(一个系统动力学建模软件包)转换为python,并允许用户用比Vensim更复杂的例程替换各种方程。我正在运行一个具有各种下标的模型,这创建了一种不寻常的输出格式。输出被读入一个数据帧,该数据帧的下标元素的单个值最终为xarray.dataarray。我想知道如何获取一列xarray.dataarray(最终是一个系列)并将其转换为二维数组,第二个维度是下标数 import pysd import numpy as

我正在使用一个名为PySD的软件包进行系统动力学建模。PySD将模型从Vensim(一个系统动力学建模软件包)转换为python,并允许用户用比Vensim更复杂的例程替换各种方程。我正在运行一个具有各种下标的模型,这创建了一种不寻常的输出格式。输出被读入一个数据帧,该数据帧的下标元素的单个值最终为xarray.dataarray。我想知道如何获取一列xarray.dataarray(最终是一个系列)并将其转换为二维数组,第二个维度是下标数

import pysd
import numpy as np

model=pysd.load("Example.py")
stocks=model.run
pop=np.array(Population) #Creates an object array
Population=stocks.Populaton #Creates a series

#How to get an array of population values for each country?
py代码如下(请记住,这是一个任意示例来说明问题)


如果example.py文件选项卡不一致,我深表歉意。任何帮助都将不胜感激

感谢您分享此数据的示例

首先,将
xarray.DataArray
对象作为标量嵌套在
pandas.DataFrame
中是使用xarray和pandas的高度非标准方式。我不推荐。如果每个条目都是共享(某些)相同维度的DataArray,那么处理数据的最简单方法是作为
xarray.Dataset
,xarray版本的多维
pandas.DataFrame

这就是说,将数据从这种格式转换为更容易使用的非列表对象应该是很简单的。最好从
Series.values
开始,它将列提取为1D numpy数组。然后,您可以遍历该系列,并将每个
数据数组
转换为具有
值的numpy数组。综合起来:

population_numpy_array = np.stack(
    [data_array.values for data_array in df['Population'].values])
或者,您可以使用xarray堆叠DataArray对象。这将保留标签,使您的数据更易于使用:

population_data_array = xr.concat(df['Population'].values, dim='row_name')
您甚至可以将完整对象转换为
xarray.Dataset
进行联合分析:

ds = xr.Dataset({k: xr.concat(df[k].values, dim='row_name') for k in df.keys()})

(可以说,这正是PySD应该做的。)

你能打印一个带有嵌套DataArray的DataFrame的示例吗,也许是前几个元素?我发布了该系列的屏幕截图和另一个原始DataFrame的屏幕截图,谢谢。我让numpy阵列开始工作了。由于某种原因,Xarray不会显示在Spyder上的变量资源管理器中。有什么原因吗?我想我只是更熟悉Numpy,所以这个选项对我来说可能足够好了。非常感谢@shoyer这是
xr.concat
会像展平/堆叠()数据一样工作吗?
ds = xr.Dataset({k: xr.concat(df[k].values, dim='row_name') for k in df.keys()})