Matplotlib 当DataFrame列缺少值时,PyPlot抛出错误

Matplotlib 当DataFrame列缺少值时,PyPlot抛出错误,matplotlib,julia,Matplotlib,Julia,我有以下问题: 我想从一个缺少值的数据框中绘制一个变量,这些值被表示为“NA”。但是,如果我继续使用Pyplot x = df[df[:country] .== "Belgium",:year] y = df[df[:country] .== "Belgium",:hpNormLog] plot(x, y, "b-", linewidth=2) 我收到以下错误消息: PyError(:PyObject_Call)TypeError(“float()参数必须是字符串或数字,而不是'PyCall.

我有以下问题:

我想从一个缺少值的数据框中绘制一个变量,这些值被表示为“NA”。但是,如果我继续使用Pyplot

x = df[df[:country] .== "Belgium",:year]
y = df[df[:country] .== "Belgium",:hpNormLog]
plot(x, y, "b-", linewidth=2)
我收到以下错误消息:

PyError(:PyObject_Call)TypeError(“float()参数必须是字符串或数字,而不是'PyCall.jlwrap'”)
文件“C:\Anaconda3\lib\site packages\matplotlib\pyplot.py”,第3154行,在plot中
ret=ax.plot(*args,**kwargs)文件“C:\Anaconda3\lib\site packages\matplotlib\\uuuuu init\uuuuuu.py”,第1811行,在内部
返回func(ax、*args、**kwargs)文件“C:\Anaconda3\lib\site packages\matplotlib\axes\\u axes.py”,第1425行,在绘图中
self.add_line(line)文件“C:\Anaconda3\lib\site packages\matplotlib\axes\\u base.py”,第1708行,在add_line中
self.\u update\u line\u limits(line)文件“C:\Anaconda3\lib\site packages\matplotlib\axes\\u base.py”,第1730行,在\u update\u line\u limits中
path=line.get_path()文件“C:\Anaconda3\lib\site packages\matplotlib\lines.py”,在get_path中的第925行
recache中的self.recache()文件“C:\Anaconda3\lib\site packages\matplotlib\lines.py”,第621行
y=np.asarray(yconv,np.float_u2;)文件“C:\Anaconda3\lib\site packages\numpy\core\numeri。。。
如果我能找到解决办法,我将不胜感激

最好的,
Ilja

为什么不执行错误处理

try:
   plot(x, y, "b-", linewidth=2)
except PyError:
   pass

当输入的大部分时间都有效,但跳过“NA”的打印时,请退出该错误“-values….

我找到了以下解决方案。我对朱莉娅是如何工作的还不够深入,所以我只能说什么有效,什么无效。带有NaN的数组可以用上面写的代码绘制,但是数据帧的列不允许这样做。需要将列转换为数组,然后才能使用缺少的值打印该列。以下代码解决了该问题:

x = df[df[:country] .== "Belgium",:year]
ytest = df[df[:country] .== "Belgium",:hpNormLog]
y = convert(Array,ytest,NaN)
plot(x, y, "b-", linewidth=2)

x不包含缺失值,因此我可以继续使用数据帧,但y确实包含缺失值,因此需要将其转换为数组。convert的第三个参数指定应该将缺少的值转换为什么,在本例中是转换为NaN。

这看起来是正确的——基本问题是PyCall不会/不会。仅供参考,有一个熊猫包装可能会引起兴趣:谢谢你的链接,我会看一看:)
x = df[df[:country] .== "Belgium",:year]
ytest = df[df[:country] .== "Belgium",:hpNormLog]
y = convert(Array,ytest,NaN)
plot(x, y, "b-", linewidth=2)