如何删除在特定列中具有 NA 的 DataFrame 的所有行?
How can I delete all rows of a DataFrame that have an NA in a specific column?
删除 DataFrame 中特定列中具有 NA
值的所有行的最优雅方法是什么?
假设 df
是您的 DataFrame,A
是缺少值的列。你可以这样做:
nonmissingrows = findin(isna(df[:A]), false)
df = df[nonmissingrows, :]
我不知道以下是否是删除特定列中具有 NA
的所有行的最优雅方法,但这是 一个 方法。
正在生成玩具 DataFrame
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 |
过滤掉"B"
列元素为NA
的行
julia> df[~isna(df[:,symbol("B")]),:]
7x2 DataFrame
| Row | A | B |
|-----|----|----|
| 1 | 2 | 4 |
| 2 | 3 | 6 |
| 3 | 5 | 10 |
| 4 | 6 | 12 |
| 5 | 7 | 14 |
| 6 | 9 | 18 |
| 7 | 10 | 20 |
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 |
删除 "B"
-列元素为 NA
的行
julia> deleterows!(df,find(isna(df[:,symbol("B")])))
7x2 DataFrame
| Row | A | B |
|-----|----|----|
| 1 | 2 | 4 |
| 2 | 3 | 6 |
| 3 | 5 | 10 |
| 4 | 6 | 12 |
| 5 | 7 | 14 |
| 6 | 9 | 18 |
| 7 | 10 | 20 |
julia> df
7x2 DataFrame
| Row | A | B |
|-----|----|----|
| 1 | 2 | 4 |
| 2 | 3 | 6 |
| 3 | 5 | 10 |
| 4 | 6 | 12 |
| 5 | 7 | 14 |
| 6 | 9 | 18 |
| 7 | 10 | 20 |
using Lazy
using DataFramesMeta
df2 = @> df @where(!isna(:B))
@>
来自 Lazy.jl 包,它基本上将 df
@where(!isna(:B))
重写为 @where(df, !isna(:B))
。
@where
由 DataFramesMeta 包提供。第二个参数基本上是一个布尔值列表,其中应该保留哪些行,哪些不应该保留。这些函数的特殊之处在于 :B
可以作为 df[:B]
的简写
要删除所有包含 NA 值的行,简单 运行 这个,假设 df
是一个数据帧:
completecases!(df)
删除 DataFrame 中特定列中具有 NA
值的所有行的最优雅方法是什么?
假设 df
是您的 DataFrame,A
是缺少值的列。你可以这样做:
nonmissingrows = findin(isna(df[:A]), false)
df = df[nonmissingrows, :]
我不知道以下是否是删除特定列中具有 NA
的所有行的最优雅方法,但这是 一个 方法。
正在生成玩具 DataFrame
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 |
过滤掉"B"
列元素为NA
的行
julia> df[~isna(df[:,symbol("B")]),:]
7x2 DataFrame
| Row | A | B |
|-----|----|----|
| 1 | 2 | 4 |
| 2 | 3 | 6 |
| 3 | 5 | 10 |
| 4 | 6 | 12 |
| 5 | 7 | 14 |
| 6 | 9 | 18 |
| 7 | 10 | 20 |
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 |
删除 "B"
-列元素为 NA
的行
julia> deleterows!(df,find(isna(df[:,symbol("B")])))
7x2 DataFrame
| Row | A | B |
|-----|----|----|
| 1 | 2 | 4 |
| 2 | 3 | 6 |
| 3 | 5 | 10 |
| 4 | 6 | 12 |
| 5 | 7 | 14 |
| 6 | 9 | 18 |
| 7 | 10 | 20 |
julia> df
7x2 DataFrame
| Row | A | B |
|-----|----|----|
| 1 | 2 | 4 |
| 2 | 3 | 6 |
| 3 | 5 | 10 |
| 4 | 6 | 12 |
| 5 | 7 | 14 |
| 6 | 9 | 18 |
| 7 | 10 | 20 |
using Lazy
using DataFramesMeta
df2 = @> df @where(!isna(:B))
@>
来自 Lazy.jl 包,它基本上将df
@where(!isna(:B))
重写为@where(df, !isna(:B))
。@where
由 DataFramesMeta 包提供。第二个参数基本上是一个布尔值列表,其中应该保留哪些行,哪些不应该保留。这些函数的特殊之处在于:B
可以作为df[:B]
的简写
要删除所有包含 NA 值的行,简单 运行 这个,假设 df
是一个数据帧:
completecases!(df)