我有一个带有公共列名称的嵌套 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.
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