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 valorNA
?
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