Save each row of df to separate xml

Question:

I am trying to iterate through each row of an excel file, and save the output for each row to it’s separate .xml file. However, when I run the code, instead of having each row in a separate .xml file, I have all rows being saved to each generated .xml files. Obviously, I’m having confusion about iteration, and would gladly appreciate any help. Here’s my current code:

import pandas as pd

df = pd.read_excel ('C:/Users/Downloads/Book1.xlsx')

df['name'] = df['name'].map(str)
df.set_index('name',inplace=True)

for name, data in df.iterrows():
    (df.to_xml('D:/Test/' + name + '.xml' , attr_cols=["disabled", "error-if-not-time", "interval-type", "name" , "type" , "verbose"], 
                 row_name = "assesslet"))
Asked By: george12

||

Answers:

Try to change df in loop to data then convert data to one row DataFrame since there is no Series.to_xml()

for name, data in df.iterrows():
    (data.to_frame().T.to_xml('D:/Test/' + name + '.xml' , attr_cols=["disabled", "error-if-not-time", "interval-type", "name" , "type" , "verbose"], 
                 row_name = "assesslet"))
Answered By: Ynjxsjmh

try:

for name, data in df.iterrows():
    pd.DataFrame(data).to_xml(('D:/Test/' + name + '.xml') , attr_cols=["disabled", "error-if-not-time", "interval-type", "name" , "type" , "verbose"], 
                 row_name = "assesslet")

to_xml() is DataFrame specific. But each time you iterate, you end up with Pandas Series. That is why I used pd.DataFrame(). You can also use to_frame() just like mentioned above. Also first argument, encapsulate it with parenthesis since it is a string concatenation.

Answered By: mmustafaicer
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.