朱莉娅DataFrame错误:BoundsError尝试访问尝试访问索引为false的X行的数据框

时间:2019-06-25 04:14:51

标签: julia

我正在尝试在Julia中对DataFrame进行子集化,如下所示:

<link rel="stylesheet" href="https://storage.googleapis.com/non-spec-apps/mio-icons/latest/outline.css">

我希望只返回第二行,但我收到一个错误:

  

错误:BoundsError:尝试访问“试图访问数据帧   3行,索引为false”

此错误是什么意思,我该如何对DataFrame进行子集化?

2 个答案:

答案 0 :(得分:2)

仅提及其他选项,请注意,您可以在此处使用filter函数:

julia> filter(row -> row.a == 2, df)
1×2 DataFrame
│ Row │ a     │ b      │
│     │ Int64 │ String │
├─────┼───────┼────────┤
│ 1   │ 2     │ y      │

julia> df[filter(==(2), df.a), :]
1×2 DataFrame
│ Row │ a     │ b      │
│     │ Int64 │ String │
├─────┼───────┼────────┤
│ 1   │ 2     │ y      │

答案 1 :(得分:0)

幸运的是,您只需要添加一个字符:df = DataFrame(a=[1,2,3], b=["x", "y", "z"]) df2 = df[df.a == 2, :] 。使用.字符可以在任何Julia功能上进行广播,甚至可以使用.之类的功能。因此,您的代码如下:

==

在不广播的情况下,子句df = DataFrame(a=[1,2,3], b=["x", "y", "z"]) df2 = df[df.a .== 2, :] 返回df.a == 2,因为它从字面上将Array [1,2,3](作为一个整体)与标量值2进行比较。 (3,)在不进行广播的情况下永远不会等于2的标量值,因为大小不同。因此,该子句仅返回单个false

您收到的错误告诉您您正在尝试访问索引false处的DataFrame,该索引对于具有3行的DataFrame不是有效索引。通过使用false进行广播,您现在正在创建形状为(3,)的布尔数组,这是索引具有3行的DataFrame的有效方法。

有关广播的更多信息,请参见Julia的官方文档here