2016-01-20 84 views
4

在朱莉娅,我打电话一个Python模块pandas_datareader从网络上下载的数据:朱莉娅:转换的PyObject到数组

using PyCall 
@pyimport datetime 
@pyimport pandas_datareader.data as web 
gdp = web.DataReader("GDPCA","fred",start=datetime.datetime(1929,1,1)) 

变量GDP是的PyObject对象。因此,我无法操作它(以日志为例)。我如何将它转换为数组?我试过convert(Array {Float64,2},gdp),但它只会让Julia崩溃。

谢谢!

+0

喜栈溢出,请尝试格式化您的代码,使你的问题更具有可读性: (HTTP://元.stackexchange.com/questions/22186/how-do-i-format-my-code-blocks) –

+0

看起来你的'gdp'是一个熊猫'DataFrame'。通常,你可以[通过使用'object [:attribute]'语法](https://github.com/stevengj/PyCall.jl/blob/master/README.md)来访问PyObject属性。 – Chris

+0

格式化代码。我应该寻找什么属性来获取下载的值(并将它们转换为数组)? – Marek

回答

1

@pyimport宏用于在这种情况下通过PyObject类型操作Python对象,pandas DataFrame。给定o::PyObject,o[:attribute]相当于Python中的o.attribute,具有自动类型转换。因此,下面的片段展示了如何获得到Python函数调用的朱莉娅阵列,欢迎

julia> using PyCall 
julia> @pyimport datetime 
julia> gdp = web.DataReader("GDPCA","fred",start=datetime.datetime(1929,1,1)) 
julia> typeof(gdp) 
PyCall.PyObject 
julia> gdp[:values] 
87x1 Array{Float64,2}: 
1056.6 
966.7 
904.8 
788.2 
778.3 
...