如何从Julia中的数据帧中提取特定行?

如何从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

我想提取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    │
│ 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%,并且使用的内存减少了四倍。当然,有时您希望复制数据,但经验法则是不具体化