NaN-columns se traza como una columna de 0 en pandas

Tengo algunos problemas con el trazado de una rebanada DataFrame con columnas enteras llenas de NaN.

Cómo:

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

difiere de:

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

trazando una línea 0 como si la columna estuviera llena de ceros. ¿No debería funcionar el primer código como:

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

Y también funciona bien trazar solo una serie llena de NaN:

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

¿Qué me estoy perdiendo? ¿Hay una forma correcta de trazar una columna con todos los NaN o es un error?

preguntado el 27 de julio de 12 a las 15:07

1 Respuestas

Esto parece un error en pandas. Mirando el código fuente, en pandas.tools.plotting, líneas 554:556:

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

Si la columna contiene solo NaN, entonces vacío es verdadero y los valores se establecen en np.zeros().

Nota: no agregué "¿es esto correcto?" comentario: ¡está en el código fuente! (pandas v.0.8.1).

He planteado un error al respecto: https://github.com/pydata/pandas/issues/1696

Respondido 27 Jul 12, 21:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.