能否在KDB/pykx中指定部分列取原始数据,其余转pandas类型?
在KDB/pykx中实现部分列保留原始数据、其余转pandas类型
目前pykx的pd()方法并没有直接支持传入列名列表来指定部分列保留原始数据的参数,但可以通过两种变通方式实现你要的效果:
方法一:先转全pandas再替换指定列
先获取完整的原始kdb查询结果,将其转为pandas DataFrame后,再把需要保留原始数据的列从原始结果中提取出来替换回去:
import pykx as kx q = kx.SyncQConnection(host='localhost', port=8888, timeout=888.8) cmd = 'select from table where date=2025.04.30' # 获取完整的原始kdb查询结果 raw_result = q(cmd) # 先将所有列转为pandas格式 d3 = raw_result.pd() # 指定需要保留原始数据的列 target_raw_cols = ['col1','col2','col3'] # 遍历替换指定列 for col in target_raw_cols: d3[col] = raw_result[col].py()
方法二:拆分查询后合并
在q端拆分查询,分别获取需要转pandas的列和需要保留原始数据的列,最后合并成一个DataFrame:
import pykx as kx q = kx.SyncQConnection(host='localhost', port=8888, timeout=888.8) date_condition = 'date=2025.04.30' target_raw_cols = ['col1','col2','col3'] # 获取表的所有列名,筛选出需要转pandas的列 all_cols = q(f"cols from table where {date_condition}").py() pandas_cols = [col for col in all_cols if col not in target_raw_cols] # 查询需要转pandas的列并转为DataFrame pandas_part = q(f"select {','.join(pandas_cols)} from table where {date_condition}").pd() # 查询需要保留原始数据的列,转为Python可识别的原始对象 raw_part = {col: q(f"select {col} from table where {date_condition}")[col].py() for col in target_raw_cols} # 合并两部分得到最终结果 d3 = pandas_part.assign(**raw_part)
两种方法各有优劣:方法一操作简单,适合数据量较小的场景;方法二减少了不必要的数据转换开销,更适合处理大数据量的情况。
内容的提问来源于stack exchange,提问作者S.V
相关产品推荐
相关产品推荐

