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.

  • Pandas - GroupBy und dann Merge auf Originaltisch
  • Wie kann man duplizierte Zeilen mit Pandas in einer großen Datendatei löschen?
  • Wie lese ich eine .xlsx-Datei mit der Pandas-Bibliothek in iPython?
  • So erstellen Sie ein Balkendiagramm / Histogramm mit Balken pro diskreten Wert?
  • Berechnen von Zauberlängen von Daten auf der Grundlage der Gleichheit in Pandas
  • Spaltennamen aus der pyodbc execute () - Anweisung zurückgeben
  • 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.