Python,Soap 响应 pandas

Python, Zeep response to pandas

我正在尝试连接到 SOAP 网络服务并使用 pandas 放入 table。

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.

的初学者

您可以将数据(字典列表)直接传递给 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

它是这样工作的:

from zeep import Client
import pandas as pd

labels = ['Peça', 'Qtd']
desenho="C-160"
montagem="CR"

client = Client('xxxxxxxxxxxxxxxxxxxxxxxx')
resposta=list(client.service.TabelaPecas(desenho,montagem))

pecas=[]
for record in resposta:
    peca = record.ssPeca
    qtd  = record.ssQtd
    pecas.append([peca,qtd])


print('Desenho', desenho ,' Montagem', montagem)
pd.DataFrame(data=pecas,columns=labels ) 

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

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

Zeep 具有将响应转换为 python 对象的功能。例如:Ordered Dict.

你应该使用:

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