dataframe julia-lang

La forma correcta de probar NA en Julia DataFrames



julia-lang (1)

¿Cuál es la forma correcta de probar si un valor en un DataFrame es NA en el paquete Julia DataFrames?

Hasta ahora he descubierto que typeof(var) == NAtype funciona, pero ¿hay una forma más elegante de hacerlo?


Usar typeof(var) == NAtype para esto es incómodo, en particular porque no está vectorizado.

La forma canónica de probar los valores de NA es usar la función (vectorizada) llamada isna .

Ejemplo

Generemos un DataFrame de juguete con algunos valores NA en la columna B :

julia> using DataFrames julia> df = DataFrame(A = 1:10, B = 2:2:20) 10x2 DataFrame | Row | A | B | |-----|----|----| | 1 | 1 | 2 | | 2 | 2 | 4 | | 3 | 3 | 6 | | 4 | 4 | 8 | | 5 | 5 | 10 | | 6 | 6 | 12 | | 7 | 7 | 14 | | 8 | 8 | 16 | | 9 | 9 | 18 | | 10 | 10 | 20 | julia> df[[1,4,8],symbol("B")] = NA NA julia> df 10x2 DataFrame | Row | A | B | |-----|----|----| | 1 | 1 | NA | | 2 | 2 | 4 | | 3 | 3 | 6 | | 4 | 4 | NA | | 5 | 5 | 10 | | 6 | 6 | 12 | | 7 | 7 | 14 | | 8 | 8 | NA | | 9 | 9 | 18 | | 10 | 10 | 20 |

Ahora pretendamos que no conocemos el contenido de nuestro DataFrame y hagamos, por ejemplo, la siguiente pregunta:

¿La columna B contiene un valor NA ?

El enfoque typeof no funcionará aquí:

julia> typeof(df[:,symbol("B")]) == NAtype false

La función isna es más adecuada:

julia> any(isna(df[:,symbol("B")])) true