Wie konvertiere man ein pandas / dataframe zu XML?

Gibt es eine einfache Möglichkeit, einen Pandas / df Tisch zu nehmen:

field_1 field_2 field_3 field_4 cat 15,263 2.52 00:03:00 dog 1,652 3.71 00:03:47 test 312 3.27 00:03:41 book 300 3.46 00:02:40 

Und konvertieren sie nach XML nach:

 <item> <field name="field_1">cat</field> <field name="field_2">15263</field> <field name="filed_3">2.52</field> ... <item> <field name="field_1">dog</field> and so on... 

Vielen Dank im Voraus für jede Hilfe.

  • Wie verwende ich einen bestimmten Spaltenwert in einer Pandas DataFrame where-Klausel?
  • Google Spreadsheet CSV in ein Pandas Dataframe
  • Verschachteltes Wörterbuch zu Multiindex-Dataframe, wo Wörterbuchschlüssel Spaltenbeschriftungen sind
  • Mit scikit-learn (sklearn), wie man fehlende Daten für die lineare Regression behandelt?
  • Wie man bestimmte Spalten in Zeilen in Pandas umsetzt, assoziiert anderen Spaltenwert
  • Hinzufügen von Einträgen in Zeile, um es einheitlich zu machen
  • 3 Solutions collect form web for “Wie konvertiere man ein pandas / dataframe zu XML?”

    Sie können eine Funktion erstellen, die den Elementknoten aus einer Zeile in Ihrem DataFrame erstellt:

     def func(row): xml = ['<item>'] for field in row.index: xml.append(' <field name="{0}">{1}</field>'.format(field, row[field])) xml.append('</item>') return '\n'.join(xml) 

    Und dann die Funktion entlang der axis=1 anwenden.

     >>> print '\n'.join(df.apply(func, axis=1)) <item> <field name="field_1">cat</field> <field name="field_2">15,263</field> <field name="field_3">2.52</field> <field name="field_4">00:03:00</field> </item> <item> <field name="field_1">dog</field> <field name="field_2">1,652</field> <field name="field_3">3.71</field> <field name="field_4">00:03:47</field> </item> ... 

    Um auf die ausgezeichnete Antwort von Viktor zu erweitern (und es leicht zu machen, mit doppelten Spalten zu arbeiten), könntest du das als DataLrame-Methode to_xml aufstellen:

     def to_xml(df, filename=None, mode='w'): def row_to_xml(row): xml = ['<item>'] for i, col_name in enumerate(row.index): xml.append(' <field name="{0}">{1}</field>'.format(col_name, row.iloc[i])) xml.append('</item>') return '\n'.join(xml) res = '\n'.join(df.apply(row_to_xml, axis=1)) if filename is None: return res with open(filename, mode) as f: f.write(res) pd.DataFrame.to_xml = to_xml 

    Dann kannst du die xml drucken:

     In [21]: print df.to_xml() <item> <field name="field_1">cat</field> <field name="field_2">15,263</field> <field name="field_3">2.52</field> <field name="field_4">00:03:00</field> </item> <item> ... 

    Oder speichern sie in einer Datei:

     In [22]: df.to_xml('foo.xml') 

    Offensichtlich sollte dieses Beispiel angepasst werden, um Ihren xml Standard zu passen.

    Sie können das Paket xml.etree.ElementTree verwenden , um ein Lese-freundliches Format in sehr wenigen Zeilen Code zu generieren.

     root = etree.Element('data'); for i,row in dframe.iterrows(): item = etree.SubElement(root, 'item', attrib=row.to_dict()); etree.dump(root); 

    Dadurch wird ein XML-Baum (unter root) erstellt, wobei jede Zeile vom Typ item wird und Attribute für alle Spalten enthält. Sie können einen verschachtelten Baum mit Spalten erstellen, indem Sie ein Unterelement für jedes Feld erstellen.

    Dann können Sie die XML-Datei auch in Python mit dem ElementTree-Paket lesen:

     xml.etree.ElementTree.parse('xml_file.xml'); 
    Python ist die beste Programmiersprache der Welt.