FAQ > 金融建模 > 第三方交互 > Python

Q:TSLPy如何使获取的数据按天软中返回的列进行排序?    

  • A:使用TSLPy接口在天软中获取的数组列表传递到python中,python中显示的下标顺序与天软中可能并不一致,推荐以下方法维持天软中的下标顺序

    特别说明:FAQ:天软pyTSL接口中的返回结果下标与天软返回结果中一致。
    方法一
     将天软的结果集转换为Json串后再传入到python中,再调用python中的json模块对json串进行转换,会保持原下标状态
    详情参考:FAQ:Q:在天软将结果转换成Json串返回到python中解决转码引起的效率低下问题
    方法二
     将天软结果集转为数字下标转出,顺序不会发生调整
    参考:FAQ:ReIndex2
    范例一:
     将天软中的数组列名作首行输出,在python把首行转列标
    import sys
    sys.path.append("C:\Program Files\Tinysoft\AnalyseNG.NET")
    import TSLPy3 as ts
    import pandas as pd
    pd.set_option('display.max_columns', None)
    dt=ts.DefaultConnectAndLogin("sz_server")#远程登录,用自己配置的别名
    #导出数字下标数据
    ts_str = '''
     t:= Select * from Markettable Datekey 20170301T to 20170310T of array('SZ000002') end;
     t:= reindex2(t,4);
     return t;
    '''
    data = ts.RemoteExecute(ts_str, {})[1]
    #汉字列进行转码
    for i in range(len(data)):
      data[i][1]=data[i][1].decode('gbk')

    df = pd.DataFrame(data)
    #首行作为列名
    colnames=df.iloc[0]
    df.columns=list(colnames)
    #删除首行
    df.drop([0],inplace=True)
    print(df)

    部分结果


    方法三
     使用python方法重新对下标进行排序
    比如:使用Pandas dataframe.reindex()重构列名
    用法参考:https://www.cnblogs.com/Teyisang/p/14564210.html
    范例二:
    import sys
    sys.path.append("C:\Program Files\Tinysoft\AnalyseNG.NET")
    import TSLPy3 as ts
    import pandas as pd
    d.set_option('display.max_columns', None)
    dt=ts.DefaultConnectAndLogin("sz_server")#远程登录,用自己配置的别名
    #导出目标数据
    ts_str = '''
     t:= Select * from Markettable Datekey 20170301T to 20170310T of array('SZ000002') end;
     return t;
    '''
    data = ts.RemoteExecute(ts_str, {})[1]
    #汉字列进行转码
    for i in range(len(data)):
      data[i][b'StockName']=data[i][b'StockName'].decode('gbk')
    df = pd.DataFrame(data)

    ts_name='''
     t:= Select * from Markettable Datekey 20170301T to 20170301T of array('SZ000002') end;
     return mcols(t,1);
    '''
    # 获取原始数据列名
    name = ts.RemoteExecute(ts_name, {})[1]
    # 列名重构
    df = df.reindex(name,axis=1)
    print(df)

    部分结果: