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.

  • Lxml.etree und xml.etree.ElementTree Hinzufügen von Namespaces ohne Präfixe (ns0, ns1, etc.)
  • Verwenden von argparse, um csv in xml in python zu konvertieren
  • Konvertieren von Tupel zu Wörterbuch
  • So fügen Sie ein Element zu XML-Datei hinzu, indem Sie elementtree verwenden
  • Analysieren von CDATA in xml mit Python
  • So aktualisieren Sie die XML-Datei mit lxml
  • Was sind die Regeln für die Iterator-Invalidierung?
  • Wie kann ich eine GUI auf einem Python APP erstellen, damit es entweder GUI oder CLI machen kann?
  • 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.