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

Q:Python交互中如何传递DataFrame类型数据执行    

  • A:天软和python都能支持json串,在交互过程中,可以通过json串作为数据转换的桥梁,解决编码不一致及数据类型不匹配等的问题。
    交互文档:FAQ:2019-05-08-应用专题-第三方交互07:天软平台和PYTHON的交互
    Json转码方式:FAQ:Q:在天软将结果转换成Json串返回到python中解决转码引起的效率低下问题
    使用案例:
    天软相关函数简介:
    ExportJsonString(data:Any):String,将天软数据结构转换为Json串;
    ImportJsonString(data:String):Any,将Json串转换为天软数据结构。
    应用范例:
    范例01:python中调用天软函数
    天软代码:封装函数get_testtable,并给出数据参数接口

    Function get_testtable(data);
    Begin
    {
       data: json字符串 源数据
    }
       //json串转天软数据类型
       data:=importjsonstring(data);

       t:=select *,
                specall(array(close(),vol(),StockZf3()),array(pn_stock():["stock"],pn_date():StrToDate(["date"]))) as "info"
          from data end;
       t[:,array("close","vol","soockzf")]:=t[:,"info"];
       deletefield(t,"info");
       //导出天软数据转json串解决字符编码问题
       t:=exportjsonstring(t);

       return t;
    End;

    Python代码:执行交互命令,获取指定代码列表行情信息

    import json
    import pandas as pd
    import sys
    import TSLPy3 as ts
    sys.path.append("C:\Program Files\Tinysoft\Analyse.NET")
    stk=pd.DataFrame({"stock":["SZ000001","SZ000002","SZ000016"],"date":["2022-04-01","2022-04-01","2022-04-01"]})
    # dataframe转json串传参
    stk=stk.to_json(orient='records')

    #交互
    ts.DefaultConnectAndLogin("jh_test")#远程登录,用自己配置的别名或其他方式登录
    dt=ts.RemoteCallFunc("get_testtable",[stk],{})
    # 读取json格式数据
    data=json.loads(dt[1])

    print(pd.DataFrame(data))

    执行结果:

    范例02:python中执行天软脚本
    Python代码:获取指定代码列表行情信息

    import json
    import pandas as pd
    import sys
    import TSLPy3 as ts
    sys.path.append("C:\Program Files\Tinysoft\Analyse.NET")
    stk=pd.DataFrame({"stock":["SZ000001","SZ000002","SZ000016"],"date":["2022-04-01","2022-04-01","2022-04-01"]})
    # dataframe转json串传参
    stk=stk.to_json(orient='records')

    #交互
    ts.DefaultConnectAndLogin("jh_test")#远程登录,用自己配置的别名或其他方式登录
    ts_str='''
        //json串转天软数据类型
        data:=importjsonstring('%s');

       t:=select *,
                specall(array(close(),vol(),StockZf3()),array(pn_stock():["stock"],pn_date():StrToDate(["date"]))) as "info"
          from data end;
       t[:,array("close","vol","soockzf")]:=t[:,"info"];
       deletefield(t,"info");
       //导出天软数据转json串解决字符编码问题
       t:=exportjsonstring(t);

       return t;
    '''%stk
    dt=ts.RemoteExecute(ts_str,{})
    # 读取json格式数据
    data=json.loads(dt[1])

    print(pd.DataFrame(data))


    执行结果: