如何从Julia中的数据帧中提取特定行?
我想提取Julia中数据帧的第3行和第7行。MWE是:如何从Julia中的数据帧中提取特定行?,julia,Julia,我想提取Julia中数据帧的第3行和第7行。MWE是: using DataFrames my_data = DataFrame(A = 1:10, B = 16:25); my_data 10×2 DataFrame │ Row │ A │ B │ │ │ Int64 │ Int64 │ ├─────┼───────┼───────┤ │ 1 │ 1 │ 16 │ │ 2 │ 2 │ 17 │ │ 3 │ 3 │ 18
using DataFrames
my_data = DataFrame(A = 1:10, B = 16:25);
my_data
10×2 DataFrame
│ Row │ A │ B │
│ │ Int64 │ Int64 │
├─────┼───────┼───────┤
│ 1 │ 1 │ 16 │
│ 2 │ 2 │ 17 │
│ 3 │ 3 │ 18 │
│ 4 │ 4 │ 19 │
│ 5 │ 5 │ 20 │
│ 6 │ 6 │ 21 │
│ 7 │ 7 │ 22 │
│ 8 │ 8 │ 23 │
│ 9 │ 9 │ 24 │
│ 10 │ 10 │ 25 │
这将为您提供预期的输出:
using DataFrames
my_data = DataFrame(A = 1:10, B = 16:25);
my_data;
my_data[[3, 7], :]
2×2 DataFrame
│ Row │ A │ B │
│ │ Int64 │ Int64 │
├─────┼───────┼───────┤
│ 1 │ 3 │ 18 │
│ 2 │ 7 │ 22 │
Julia最大的优点是不需要具体化结果(从而节省了复制数据的内存和时间)。因此,如果需要任何类似数组的结构的子范围,最好使用
@view
,而不是直接具体化
julia> @view my_data[[3, 7], :]
2×2 SubDataFrame
│ Row │ A │ B │
│ │ Int64 │ Int64 │
├─────┼───────┼───────┤
│ 1 │ 3 │ 18 │
│ 2 │ 7 │ 22 │
现在是性能测试
function submean1(df)
d = df[[3, 7], :]
mean(d.A)
end
function submean2(df)
d = @view df[[3, 7], :]
mean(d.A)
end
和测试:
julia> using BenchmarkTools
julia> @btime submean1($my_data)
689.262 ns (19 allocations: 1.38 KiB)
5.0
julia> @btime submean2($my_data)
582.315 ns (9 allocations: 288 bytes)
5.0
即使在这个简单的例子中,@view
的速度也提高了15%,并且使用的内存减少了四倍。当然,有时您希望复制数据,但经验法则是不具体化