Julia DataFrame按条件查找修改数据及元组索引空结果问题
问题解答
一、为什么q[q.state .== (1,1), :]返回空DataFrame?
最可能的原因有两个:
- 值不匹配:检查
state列中存储的元组与查询用的(1,1)是否真的相等。可以手动验证:
如果返回q.state[1] == (1,1) # 查看返回true还是falsefalse,说明实际存储的元组和查询元组的类型/值不一致(比如元组元素是浮点数而非整数)。 - 索引设置问题:你提到把
state作为索引列,但从show(q)的输出看,state仍是普通列(左侧行号是默认整数索引)。不过未设置索引本身不会导致查询返回空,核心还是值是否匹配的问题。
二、正确的访问与修改方法
方法1:将state设为索引(推荐)
先把state列设置为DataFrame的索引:
using DataFrames setindex!(q, :state) # 将state列设为索引
之后可以直接通过元组索引访问和修改数据:
# 访问(1,1)对应的down列值 q[(1,1), :down] # 修改(1,1)对应的down列值 q[(1,1), :down] = 2.5
方法2:保留state为普通列
如果不设置索引,使用布尔索引时注意列名用符号:down或字符串"down"(不要用单引号'down',单引号在Julia中表示单个字符,不是列名):
# 访问(1,1)对应的down列 q[q.state .== (1, 1), :down] # 修改(1,1)对应的down列值 q[q.state .== (1, 1), :down] .= 3.0 # 用广播赋值确保修改原DataFrame
也可以用subset函数更清晰地筛选行:
# 筛选state为(1,1)的行 subset(q, :state => x -> x == (1, 1)) # 筛选后修改down列 subset(q, :state => x -> x == (1, 1)).down .= 3.0
内容的提问来源于stack exchange,提问作者PokeLu
相关产品推荐
相关产品推荐

