使用 pandas read_xml 解析具有公共列名称的嵌套 XML

问题描述 投票:0回答:1

我有一个带有公共列名称的嵌套 xml 文件(在本例中为名称)。我需要解析此 XML 以具有不同的列。

  <Employee>
    <Name>Tanmay</Name>
    <City>
      <Name>ABC</Name>
      <County>
        <Name>Sunny</Name>
      </County>
    </City>
  </Employee>
</Company>

当我使用

解析此 XML 文件时
df=pd.read_xml("your_xml_file.xml")
print(df)

我明白了

   Name  City
  Tanmay   NaN

我在 pandas read_xml 中看到一个带有名称的选项。我想知道我是否可以在我的用例中使用该选项以及如何使用它?

https://pandas.pydata.org/docs/reference/api/pandas.read_xml.html

nameslist-like, optional
Column names for DataFrame of parsed XML data. Use this parameter to rename original element names and distinguish same named elements and attributes.
pandas xml dataframe xml-parsing
1个回答
0
投票

names
中的
pd.read_xml
参数确实可以用来处理具有公共列名的情况。但是,您的情况的问题不是由列名本身引起的,而是由 XML 结构引起的。

在您的 XML 文件中,不同级别的

Name
元素不处于同一层次结构级别,因此它们不能直接比较。因此,当您使用
pd.read_xml
时,它将它们视为不同的列,而不是具有不同值的同一列。

处理这种情况的一种可能的解决方案是重构 XML 文件,使不同级别的

Name
元素成为单个父元素的子元素。然后,您可以使用
names
中的
pd.read_xml
参数来指定新列名称。

以下是 XML 文件重组后的外观示例:

<Company>
 <Employee>
    <Info>
      <Name>Tanmay</Name>
    </Info>
    <City>
      <Info>
        <Name>ABC</Name>
      </Info>
      <County>
        <Info>
          <Name>Sunny</Name>
        </Info>
      </County>
    </City>
 </Employee>
</Company>

然后,您可以将 pd.read_xml 与名称参数一起使用,如下所示:

nameslist = ['Name', 'City', 'County']
df=pd.read_xml("your_xml_file.xml", names=nameslist)
print(df)

这将为您提供一个具有指定列名称的 DataFrame:

    Name  City County
0 Tanmay   ABC Sunny
© www.soinside.com 2019 - 2024. All rights reserved.