python pandas dataframe如何在to_xml函数中使用样式表

Chr*_*cia 5 python xml xslt dataframe pandas

我有一个像这样的数据框:

第 1 列 列2 第 3 列 第 4 列 第5栏 第 6 栏 7 号栏 8 号栏 第 9 栏 第 10 栏
... ... ... ... ... ... ... ... ... ...
... ... ... ... ... ... ... ... ... ...

我想创建一个像这样的xml:

<?xml version='1.0' encoding='utf-8'?>
<root xmlns:xsi="http://www.example.com" xmlns="http://www.example.com">
  <all>
    <col>
      <col1>...</col1>
      <col2>...</col2>
      <col3>...</col3>
      <col4>...</col4>
      <col5>...</col5>
      <col6>...</col6>
      <group1>
        <col7>...</col7>
        <col8>...</col8>
      </group1>
      <group2>
        <col9>...</col9>
        <col10>...</col10>
      </group2>
    </col>
    <col>
      <col1>...</col1>
      <col2>...</col2>
      <col3>...</col3>
      <col4>...</col4>
      <col5>...</col5>
      <col6>...</col6>
      <group1>
        <col7>...</col7>
        <col8>...</col8>
      </group1>
      <group2>
        <col9>...</col9>
        <col10>...</col10>
      </group2>
    </col>
  </all>
</root>
Run Code Online (Sandbox Code Playgroud)

我的解决方案是在 to_xml 函数中使用样式表,如下所示:

df.to_xml("example.xml", root_name='all', row_name='col', encoding='utf-8', xml_declaration=True, pretty_print=True, index=False, stylesheet='example.xslt')
Run Code Online (Sandbox Code Playgroud)

但我不知道如何编写 example.xslt 文件以及如何设置 to_xml 函数来获取所需的 xml。我正在寻找可能有效的 xslt 的建议和示例

n1c*_*s.m 3

您的功能设置to_xml似乎没问题。在下面的代码中,我生成一个包含 20 行和 10 列的 DataFrame 来模拟您的示例。您将在下面找到一个xslt可能适用于您给出的示例的文件示例以及该示例的 XML 输出。

import pandas as pd
import numpy as np

np.random.seed(42)
df = pd.DataFrame(np.random.randint(0,100,size=(20, 10)), columns=[f'col{i+1}' for i in range(10)])

df.to_xml("example.xml", root_name='all', row_name='col', encoding='utf-8', xml_declaration=True, pretty_print=True, index=False, stylesheet='example.xslt')
Run Code Online (Sandbox Code Playgroud)

文件示例.xslt

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<root>
  <all>
      <xsl:for-each select="all/col">
      <col>
            <col1><xsl:value-of select="col1"/></col1>
            <col2><xsl:value-of select="col2"/></col2>
            <col3><xsl:value-of select="col3"/></col3>
            <col4><xsl:value-of select="col4"/></col4>
            <col5><xsl:value-of select="col5"/></col5>
            <col6><xsl:value-of select="col6"/></col6>
        <group1>
            <col7><xsl:value-of select="col7"/></col7>
            <col8><xsl:value-of select="col8"/></col8>
        </group1>
        <group2>
            <col9><xsl:value-of select="col9"/></col9>
            <col10><xsl:value-of select="col10"/></col10>
        </group2>
      </col>
      </xsl:for-each>
  </all>
</root>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)

输出文件example.xml

<?xml version="1.0"?>
<root>
    <all>
        <col>
            <col1>51</col1>
            <col2>92</col2>
            <col3>14</col3>
            <col4>71</col4>
            <col5>60</col5>
            <col6>20</col6>
            <group1>
                <col7>82</col7>
                <col8>86</col8>
            </group1>
            <group2>
                <col9>74</col9>
                <col10>74</col10>
            </group2>
        </col>
        <col>
            <col1>87</col1>
            <col2>99</col2>
            <col3>23</col3>
            <col4>2</col4>
        ...
    ...
...
Run Code Online (Sandbox Code Playgroud)