kdb - 从 KDB 中导入的 CSV 按月分箱日期值?

标签 kdb

我有一个 .csv 文件,其示例架构如下:

item, date
10,2015.01.01
2,2015.02.01
3,2015.01.15
4,2015.03.01
5,2015.03.01
20,2015.03.01
11,2015.02.01
23,2015.01.21
13,2015.01.31

我希望将这些项目按年/月/日进行分类,即 2015-01、2015-02、2015-03。 我尝试了以下行,它似乎不起作用:

select item by 1 xbar date.month from table

还尝试使用新列进行更新:

update column: `mm$date from table

导入 .csv 文件似乎会将字段转换为符号。我需要先显式地将其转换回日期类型吗?

如何打印出包含按特定时间/日期条件分类的值的表格?

最佳答案

要在读取 csv 时应用类型,请使用 0:,如下所示:

q)("ID";enlist ",") 0: `:test.csv
item date
---------------
10   2015.01.01
2    2015.02.01
3    2015.01.15
4    2015.03.01
5    2015.03.01
20   2015.03.01
11   2015.02.01
23   2015.01.21
13   2015.01.31

左侧参数是一个包含两个项目的列表,"ID" 指定每列的类型(整数、日期),"," 指定分隔符 ( enlist 表示存在列标题)。

然后可以按月对数据进行存储:

q)select item by 1 xbar `month$date from ("ID";enlist ",") 0: `:test.csv
date   | item
-------| -----------
2015.01| 10 3 23 13i
2015.02| 2 11i
2015.03| 4 5 20i

或者,如果您想要自定义大小的存储桶,则可以使用 bin 和日期列表作为存储桶分隔符。这将给出一个整数值,指示每个日期属于哪个 bin,然后您可以使用字典来命名存储桶:

q)b:2015.01.01 2015.02.01 2015.03.01
q)d:(0 1 2)!`month$b
q)select item by d b bin date from ("ID";enlist ",") 0: `:test.csv
date   | item
-------| -----------
2015.01| 10 3 23 13i
2015.02| 2 11i
2015.03| 4 5 20i

注意:bin 将为第一个分隔符下方的值分配 -1。使用binr将从0开始计数:

q)b bin 2014.12.31
-1
q)b binr 2014.12.31
0

关于kdb - 从 KDB 中导入的 CSV 按月分箱日期值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56391989/

相关文章:

kdb - 使用每个权限将参数传递给 kdb 函数

kdb - (kdb+/q) 是否可以连接或组合行?

null - 如何在 KDB 中用空格替换 Null?

kdb - 在 q kdb 中的函数内定义全局变量

kdb - 如何删除KDB中连续的重复行?

currying - [KDB+/Q] : Apply list of functions over data sequentially (pipe)

kdb - q 如何缓存数据?

kdb - 如何在 kdb/q 中保存程序?

kdb - 在 KDB 中的列表比较期间等于不抛出错误

python - 在Win7中安装qPython