Python пены получают данные через soap запрос импорта в pandas - определяют столбцы и строки - PullRequest
0 голосов
/ 10 апреля 2020

Я использую suds для получения данных из wsdl, и я успешно получил данные из соответствующей службы. Теперь в ответ у меня есть данные ниже, которые являются «sudsobject»

(rowset){item[] = ](row){]item[] = (column){name = "client_hi"value = "01.129"},(column){name = "vendor_hi"value = "01.199"(column){name = "src_bill_time"value = "1521.37"},},(row){item[] = (column){name = "client_hi"value = "01.129"},(column){name = "vendor_hi"value = None},(column){name = "src_bill_time"value = None},},(row){item[] = (column){name = "client_hi"value = "01.129"},(column){name = "vendor_hi"value = "01.196"},(column){name = "src_bill_time"value = "898.88"},}

Теперь мне нужен Dataframe в pandas, который включает в себя «name» в виде столбцов, включая 3 «row» s с данными "value" внутри каждой ячейки.

Запрошенный вывод:

client_hi,vendor_hi,src_bill_time
1.129,1.199,1521.37
1.129,None,None
1.129,1.196,898.88

Кроме того, я могу преобразовать его в json сериализованный формат:

{'item': [{'name': 'client_hi', 'value': '01.129'}, {'name': 'vendor_hi', 'value': '01.199'}, {'name': 'src_bill_time', 'value': '1521.37'},]}

{'item': [{'name': 'client_hi', 'value': '01 .129 '}, {' name ':' vendor_hi ',' value ':' None '}, {' name ':' src_bill_time ',' value ':' None '},]} {' item ': [{' name ':' client_hi ',' value ': '01 .129'}, {'name': 'vendor_hi', 'value': '1.196'}, {'name': 'src_bill_time', 'value': '898.88'},]}

Но, тем не менее, я ищу способ создания таблицы данных для импорта внутри pandas включает «имя» в виде столбцов, включает 3 «строки» с данными «значения» внутри каждой ячейки. (Как и выше «запрошенный вывод»)

1 Ответ

0 голосов
/ 12 апреля 2020

Я нашел решение. Мне пришлось преобразовать объект suds в JS сериализованные числа:

def recursive_asdict(d):
"""Convert Suds object into serializable format."""
out = {}
for k, v in asdict(d).items():
    if hasattr(v, '__keylist__'):
        out[k] = recursive_asdict(v)
    elif isinstance(v, list):
        out[k] = []
        for item in v:
            if hasattr(item, '__keylist__'):
                out[k].append(recursive_asdict(item))
            elif not isinstance(item, list):
                out[k] = item
            else:
                out[k].append(item)
    else:
        out[k] = v
return out

, который дает формат, упомянутый в вопросе: {'item': [{'name' ... Впоследствии, с помощью Regex , Преобразовать в список python с удалением некоторых символов и «значения» и «имени», которые дают мне следующий формат:

[{'client_hi':  '01.129','vendor_hi':  '01.199' ,src_bill_time',  '1521.37',}]

и, наконец, с использованием pandas

import pandas
df=pd.DataFrame(my_customized_list)
...