[Python] How to convert xml file into pandas DataFrame

Discussão em 'Python' iniciado por Stack, Maio 5, 2025.

  1. Stack

    Stack Membro Participativo

    I am working in sameval 2014 task 4 dataset. it is an xml file, that looks like:

    <?xml version="1.0" encoding="UTF-8"?>
    -<sentences>


    -<sentence id="2339">
    <text>I charge it at night and skip taking the cord with me because of the good battery life.</text>


    -<aspectTerms>
    <aspectTerm to="45" from="41" polarity="neutral" term="cord"/>
    <aspectTerm to="86" from="74" polarity="positive" term="battery life"/>
    </aspectTerms>
    </sentence>


    -<sentence id="812">
    <text>I bought a HP Pavilion DV4-1222nr laptop and have had so many problems with the computer.</text>
    </sentence>


    -<sentence id="1316">
    <text>The tech guy then said the service center does not do 1-to-1 exchange and I have to direct my concern to the "sales" team, which is the retail shop which I bought my netbook from.</text>


    -<aspectTerms>
    <aspectTerm to="41" from="27" polarity="negative" term="service center"/>
    <aspectTerm to="121" from="109" polarity="negative" term="" sales" team"/>
    <aspectTerm to="12" from="4" polarity="neutral" term="tech guy"/>
    </aspectTerms>
    </sentence>


    -<sentence id="2328">
    <text>I investigated netbooks and saw the Toshiba NB305-N410BL.</text>
    </sentence>
    -<sentence id="1712">
    <text>This was an update from an early MacBook Pro.</text>
    </sentence>


    -<sentence id="2982">
    <text>I think I might rather suffer for something that is simple to fix in my opinion.</text>
    </sentence>
    </sentences>


    I have to convert it into pandas DataFrame with the id, text, term, polarity columns. So resulting DataFrame should look like

    id text term polarity
    2339 I charge it at night and skip... cord neutral
    2339 I charge it at night and skip... batterylife positive


    I tried to make an ordered dict

    with open('/content/Laptops_Train.xml', 'r', encoding='utf-8') as file:
    my_xml = file.read()


    I used xmltodict library to parse and convert the XML document

    laptop_dict = xmltodict.parse(my_xml)


    then I converted into DataFrame:

    laptop_dict = json.loads(json.dumps(laptop_dict))

    user_ids = []
    frames = []

    for user_id, d in laptop_dict.items():
    user_ids.append(user_id)
    frames.append(pd.DataFrame.from_dict(d))

    df =pd.concat(list(frames), keys=user_ids)


    the DataFrame looks like:

    [​IMG]

    I tried stripping it using str.split but it gives error

    ValueError: Columns must be same length as key


    How can I convert it into desired format?

    Continue reading...

Compartilhe esta Página