python - XML to pandas: Export to csv and make the childrens in same row -


i in "munging stage", trying convert xml file csv pandas. did code bellow:

for element in etree.iterparse(path):          data.append({element.tag: element.text}) df = pd.dataframe(data,columns=['nome_distrito', 'nr_cpe', 'marca_equipamento',                                 'nr_equipamento','valor_leitura','registador',                                 'tipo_registador','tipo_dados_recolhidos','factor_multiplicativo_final',                                 'nr_digitos_inteiro','unidade_medida','tipo_leitura','motivo_leitura',                                 'estado_leitura','data_leitura','hora_leitura'])  df.to_csv('/lecture.csv') 

this xml file:

<distrito xmlns:xsi="http://www.w3.org/2001/xmlschema-instance">    <nome_distrito>braganca</nome_distrito>      <cpe>      <nr_cpe>pt000200003724</nr_cpe>        <leitura>        <marca_equipamento>102</marca_equipamento>        <nr_equipamento>30806746</nr_equipamento>        <valor_leitura>16858</valor_leitura>        <registador>001</registador>        <tipo_registador>s</tipo_registador>        <tipo_dados_recolhidos>1</tipo_dados_recolhidos>        <factor_multiplicativo_final>1</factor_multiplicativo_final>        <nr_digitos_inteiro>5</nr_digitos_inteiro>        <unidade_medida>kwh</unidade_medida>        <tipo_leitura>2</tipo_leitura>        <motivo_leitura>2</motivo_leitura>        <estado_leitura>a</estado_leitura>        <data_leitura>20151218</data_leitura>        <hora_leitura>083800</hora_leitura>      </leitura>      <leitura>        <marca_equipamento>102</marca_equipamento>        <nr_equipamento>30806746</nr_equipamento>        <valor_leitura>16925</valor_leitura>        <registador>001</registador>        <tipo_registador>s</tipo_registador>        <tipo_dados_recolhidos>1</tipo_dados_recolhidos>        <factor_multiplicativo_final>1</factor_multiplicativo_final>        <nr_digitos_inteiro>5</nr_digitos_inteiro>        <unidade_medida>kwh</unidade_medida>        <tipo_leitura>1</tipo_leitura>        <motivo_leitura>1</motivo_leitura>        <estado_leitura>a</estado_leitura>        <data_leitura>20160119</data_leitura>        <hora_leitura>203000</hora_leitura>      </leitura>     </cpe>

and final result in excel:

nome_distrito nr_cpe marca_equipamento nr_equipamento valor_leitura registador tipo_registador tipo_dados_recolhidos factor_multiplicativo_final nr_digitos_inteiro unidade_medida tipo_leitura motivo_leitura estado_leitura data_leitura hora_leitura braganca

pt000200003724                                102                                                          30806746                                                             16925                                                            1                                                            s                                                            1                                                            1                                                            5                                                            kwh                                                          1                                                            1                                                                                                                       20160119                                                             203000 

all want have data in same row after column "marca_equipamento", can see "shape staircase row". there can pandas or excel fix , have in nice manner in excel?

nome_distrito nr_cpe marca_equipamento nr_equipamento valor_leitura registador tipo_registador tipo_dados_recolhidos factor_multiplicativo_final nr_digitos_inteiro unidade_medida tipo_leitura motivo_leitura estado_leitura data_leitura hora_leitura braganca
pt0002000021673724je
102 30806746 16858 1 s 1 1 5 kwh 2 2 20151218 83800 102 30806746 16925 1 s 1 1 5 kwh 1 1 20160119 203000

consider running conditionals in iterparse(). because <nome_distrito> , <nr_cpe> lie outside repeated <leitura> elements, save values in scalars added inner{} dictionary appending dataframe:

import xml.etree.elementtree et import pandas pd  path ='/path/to/input.xml'  data = [] (ev, el) in et.iterparse(path):     if el.tag == 'nome_distrito': nome = el.text     if el.tag == 'nr_cpe': nr = el.text     if el.tag == "leitura":         inner = {}         inner['nome_distrito'] = nome         inner['nr_cpe'] = nr         in el:             inner[i.tag] = i.text                 data.append(inner)  df = pd.dataframe(data) print(df)  #   data_leitura estado_leitura factor_multiplicativo_final hora_leitura  \ # 0     20151218                                        1       083800    # 1     20160119                                        1       203000     #   marca_equipamento motivo_leitura nome_distrito          nr_cpe  \ # 0               102              2      braganca  pt000200003724    # 1               102              1      braganca  pt000200003724     #   nr_digitos_inteiro nr_equipamento registador tipo_dados_recolhidos  \ # 0                  5       30806746        001                     1    # 1                  5       30806746        001                     1     #   tipo_leitura tipo_registador unidade_medida valor_leitura   # 0            2               s            kwh         16858   # 1            1               s            kwh         16925  

Comments

Popular posts from this blog

magento2 - Magento 2 admin grid add filter to collection -

Android volley - avoid multiple requests of the same kind to the server? -

Combining PHP Registration and Login into one class with multiple functions in one PHP file -