将0N值转换为对应数据类型的正确空值(null)
KDB/Q 替换0N为对应类型空值的解决方法
问题场景
你的sid列(symbol类型)中混入了0N(float类型空值),price列(float类型)中也存在0N,需要将这些0N分别转换为对应数据类型的空值:
- symbol类型列的空值为 ``(反引号)
- float类型列的空值为
0Nf(控制台显示为0N)
具体解决步骤
1. 单独处理sid列
假设你的sid列表为:
sid: `aapl`tsla,0N,`jpm
执行以下语句将其中的0N替换为symbol类型空值:
sid: @[sid; where 0N=sid;:;`]
执行后sid会变为:aapltsla``jpm
2. 单独处理price列
price列中的0N本身就是float类型的空值,若需确保类型统一,可执行:
update price: 0Nf^price from tb
此操作会将列中所有非float的空值统一转为float类型空值。
3. 批量处理整表所有列
如果需要自动处理表中所有列,将每个列里的0N替换为对应类型的空值,可定义如下函数:
fixNulls:{[t] update {ty:type x; @[x; where 0N=x;:;ty$0N]} each flip t from t}
调用方式:
tb: fixNulls tb
该函数会遍历表的每一列,自动识别列数据类型,将列内的0N替换为对应类型的标准空值。
内容的提问来源于stack exchange,提问作者threedom
相关产品推荐
相关产品推荐

