在Julia DataFrames中测试NA的正确方法

时间:2015-01-26 15:52:18

标签: dataframe julia

在Julia DataFrames包中测试DataFrame中的值是否为NA的正确方法是什么?

我已经发现typeof(var) == NAtype有效,但有更优雅的方式吗?

1 个答案:

答案 0 :(得分:10)

使用typeof(var) == NAtype这是很尴尬的,特别是因为它没有矢量化。

测试NA值的规范方法是使用名为isna的(向量化)函数。

实施例

让我们在NA列中生成一些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 |

现在让我们假装我们不知道DataFrame的内容,并询问以下问题:

  

B是否包含NA值?

typeof方法不起作用,在这里:

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

isna功能更合适:

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