使用Embedpy将Q表转换为熊猫数据框

时间:2018-07-30 23:58:51

标签: kdb

我正在寻找一种将q / kdb表保存到拼花文件中的方法。我发现的最直接的方法是使用embedPy将q表转换为熊猫数据框。有人做到了吗?

欢呼

迪迪尔

1 个答案:

答案 0 :(得分:3)

要将q表转换为熊猫数据框,可以使用以下功能:

tab2df:{
r:.p.import[`pandas;`:DataFrame;x][@;cols x];
$[count k:keys x;r[`:set_index]k;r]}

要将熊猫数据框转换为q表,可以使用以下功能:

df2tab:{n:$[.p.isinstance[x`:index;.p.import[`pandas]`:RangeIndex]`;0;x[`:index.nlevels]`];n!flip $[n;x[`:reset_index][];x][`:to_dict;`list]`}

df2tab需要将熊猫数据框添加到embedPy对象。您可以使用.p.wrap
参见下面的示例

q)\l p.q  
q)tab:([]a:10?10.;b:10?10;c:10?`aaa`bbb`ccc)
q)tab
   a         b c  
  ---------------
  1.086824  2 ccc
  9.598964  7 aaa
  0.3668341 8 aaa
  6.430982  5 ccc
  6.708738  6 aaa
  6.789082  4 bbb
  4.12317   1 aaa
  9.877844  3 aaa
  3.867353  3 aaa
  7.26781   7 ccc
q)tab2df[tab]
  {[f;x]embedPy[f;x]}[foreign]enlist
q)print tab2df[tab]
          a  b    c
0  1.086824  2  ccc
1  9.598964  7  aaa
2  0.366834  8  aaa
3  6.430982  5  ccc
4  6.708738  6  aaa
5  6.789082  4  bbb
6  4.123170  1  aaa
7  9.877844  3  aaa
8  3.867353  3  aaa
9  7.267810  7  ccc
q)pdtab:tab2df[tab]
q)df2tab[pdtab] 
  a         b c    
 -----------------
 1.086824  2 "ccc"
 9.598964  7 "aaa"
 0.3668341 8 "aaa"
 6.430982  5 "ccc"
 6.708738  6 "aaa"
 6.789082  4 "bbb"
 4.12317   1 "aaa"
 9.877844  3 "aaa"
 3.867353  3 "aaa"
 7.26781   7 "ccc"

希望这会有所帮助!