Julia DataFrame错误:BoundersError尝试访问尝试访问索引处有X行的数据帧false
我试图在Julia中对数据帧进行子集划分,如下所示:Julia DataFrame错误:BoundersError尝试访问尝试访问索引处有X行的数据帧false,julia,Julia,我试图在Julia中对数据帧进行子集划分,如下所示: df = DataFrame(a=[1,2,3], b=["x", "y", "z"]) df2 = df[df.a == 2, :] df = DataFrame(a=[1,2,3], b=["x", "y", "z"]) df2 = df[df.a .== 2, :] 我希望只返回第二行,但是我得到了一个错误: 错误:边界错误:尝试访问“尝试访问数据帧” 索引处有3行“false” 这个错误是什么意思?如何对数据帧进行子集划分?幸运的
df = DataFrame(a=[1,2,3], b=["x", "y", "z"])
df2 = df[df.a == 2, :]
df = DataFrame(a=[1,2,3], b=["x", "y", "z"])
df2 = df[df.a .== 2, :]
我希望只返回第二行,但是我得到了一个错误:
错误:边界错误:尝试访问“尝试访问数据帧”
索引处有3行“false”
这个错误是什么意思?如何对数据帧进行子集划分?幸运的是,您只需要添加一个字符:
。
字符可以在任何Julia函数上进行广播,即使是像=
这样的函数。因此,您的代码如下所示:
df = DataFrame(a=[1,2,3], b=["x", "y", "z"])
df2 = df[df.a == 2, :]
df = DataFrame(a=[1,2,3], b=["x", "y", "z"])
df2 = df[df.a .== 2, :]
在没有广播的情况下,子句df.a==2
返回false
,因为它实际上是将数组[1,2,3]作为一个整体单位与标量值2进行比较。形状(3,)的数组在不广播的情况下永远不会等于标量值2,因为大小不同。因此,该子句只返回一个false
您收到的错误告诉您正在尝试访问索引为false的数据帧,该索引不是包含3行的数据帧的有效索引。通过使用
进行广播,您现在创建了一个shape(3,)的Bool数组,这是一种为包含3行的数据帧编制索引的有效方法
有关广播的更多信息,请参阅Julia官方文档。仅提及其他选项请注意,您可以在此处使用
过滤器
功能:
julia> filter(row -> row.a == 2, df)
1×2 DataFrame
│ Row │ a │ b │
│ │ Int64 │ String │
├─────┼───────┼────────┤
│ 1 │ 2 │ y │
或
为什么你总是问自己的问题,回答自己的问题?让别人更容易用谷歌搜索常见错误,更快地找到答案。我的理解是,这是受到鼓励的。