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
我正在尝试连接到 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