Python,Zeep对熊猫的反应

时间:2018-01-30 18:33:22

标签: python pandas zeep

我尝试连接SOAP Web服务并使用pandas放入表中。

Zeep给我这个清单:

[{
    'ssPeca': '103',
    'ssQtd': '1',
    'ssUn': 'un'
}, {
    'ssPeca': '291A',
    'ssQtd': '8',
    'ssUn': 'un'
}, {
    'ssPeca': '406B',
    'ssQtd': '8',
    'ssUn': 'un'
}]

我的代码是:

client = zeep.Client(wsdl=wsdl)
pecas=client.service.TabelaPecas("C-160","CR")

pd.DataFrame.from_dict(pecas)

并且该代码生成了这个:

      0     1    2
0  ssPeca ssQtd ssUn 
1  ssPeca ssQtd ssUn 
2  ssPeca ssQtd ssUn 

但我想要这个:

      0     1    2
0    103    1   un 
1    291A   8   un 
2    406B   8   un 

任何人都可以帮忙吗?我只是python的初学者。

3 个答案:

答案 0 :(得分:3)

Zeep具有将响应转换为python对象的功能。例如:命令字典。

您应该使用:

from zeep.helpers import serialize_object

client = zeep.Client(wsdl=wsdl)
pecas=client.service.TabelaPecas("C-160","CR")

pecas = serialize_object(pecas)

pd.DataFrame(pecas)

来源:http://docs.python-zeep.org/en/latest/helpers.ht

编辑:修正了错字,谢谢voglster

答案 1 :(得分:0)

您可以将数据(dicts列表)直接传递给pd.DataFrame。它应该看起来像你想要的那样。

>>> data = [{
...     'ssPeca': '103',
...     'ssQtd': '1',
...     'ssUn': 'un'
... }, {
...     'ssPeca': '291A',
...     'ssQtd': '8',
...     'ssUn': 'un'
... }, {
...     'ssPeca': '406B',
...     'ssQtd': '8',
...     'ssUn': 'un'
... }]
>>> pd.DataFrame(data=data)
  ssPeca ssQtd ssUn
0    103     1   un
1   291A     8   un
2   406B     8   un

答案 2 :(得分:0)

它的工作原理如下:

 public InputStream getImage(long anIndex){
    InputStream binaryStream = null;
    try{Statement stmt = null;
        int intIndex = (int) anIndex;
        //connect to database
        Class.forName("org.h2.Driver");
        Connection conn = DriverManager.
                getConnection("jdbc:h2:mem:Users", "sa", "");
        System.out.println("Connected database successfully...");
        //insert data
        System.out.println("Getting expenses from the database...");
        stmt = conn.createStatement();
        ResultSet resultSet = stmt.executeQuery("SELECT * FROM EXPENSES");
        Blob imageBlob = resultSet.getBlob(intIndex);
        binaryStream = imageBlob.getBinaryStream(0, imageBlob.length());


    }


        catch (Exception e){

        }
        return binaryStream;
    }

可能是因为我是python的初学者,可能这是一种解决方法,但可以使用zeep响应。使用带有列表的pd.DataFrame但不能使用zeep响应。

也许有一天会帮助像我这样的初学者。