NaN列被绘制为pandas中的全0列

时间:2012-07-27 14:16:51

标签: pandas

我在绘制切片DataFrame时会遇到一些问题,整个列都填充了NaN。

怎么来:

pandas.DataFrame(
    dict(
        A=pandas.Series([np.NaN]*32),
        B=pd.Series(range(-1,32))
    )
).plot()

与:

不同
#Ugly fix
pandas.DataFrame(
    dict(
        A=pandas.Series( [0] + [numpy.NaN]*32),
        B=pd.Series(range(-1,32))
    )
).plot()

通过绘制0线,就像列填充零一样。 第一个代码不应该像以下一样工作:

pylab.plot(
    range(0,33),
    range(-1,32),
    range(0,32),
    [numpy.NaN]*32
)

并且只绘制一个充满NaN的系列也可以正常工作:

pandas.Series([numpy.NaN]*32).plot()

我错过了什么?有没有正确的方法来绘制所有NaN的列,还是一个bug?

1 个答案:

答案 0 :(得分:1)

这看起来像pandas中的错误。查看源代码,在pandas.tools.plotting, lines 554:556中:

empty = df[col].count() == 0                                       
# is this right?                                                   
values = df[col].values if not empty else np.zeros(len(df))        

如果列仅包含NaN,则empty为True,值设置为np.zeros()。

注意:我没有添加“这是对的吗?”评论:它在源代码中! (pandas v.0.8.1)。

我提出了一个关于它的错误:https://github.com/pydata/pandas/issues/1696