将 XML 数据解析为 pandas 多索引数据帧

Parsing XML data into pandas multiindex dataframe

我想将 XML 文件中的数据解析为多索引 pandas 数据帧。我的 XML 文件如下所示:

<?xml version="1.0"?>
<catalog>
   <book name="Documents/Books/German">
      <author>Kerstin Gier</author>
      <title>Rubinrot</title>
   </book>
   <book name="Documents/Articles/English">
      <author>Kim Ralls</author>
      <title>Midnight Rain</title>
   </book>
   <book name="Documents/Books/English">
      <author>Eva Corets</author>
      <title>Maeve Ascendant</title>
   </book>
   <book name="Documents/Books/English">
      <author>Karl Parker</author>
      <title>Worldeater</title>
   </book>
</catalog>

目标是将所有图书标签中的数据存储到一个多索引 pandas 数据帧中,该数据帧应如下所示:

                              author        title   
Documents  Books     German   Kerstin Gier  Rubinrot        
                     English  Eva Corets    Maeve Ascendant
                              Karl Parker   Worldeater
           Articles  German   Null          Null
                     English  Kim Ralls     Midnight Rain

多索引数据帧的索引应该是属性"name"包含的路径。我不想对任何路径进行硬编码,因为我的真实世界示例有许多不同的路径,而多索引数据框将有 5-6 个维度。

到目前为止我的方法: 我开始创建一个看起来像这样的单一索引数据框

path                        author        title 
Documents/Books/German      Kerstin Gier  Rubinrot
Documents/Articles/English  Kim Ralls     Midnight Rain
Documents/Books/English     Eva Corets    Maeve Ascendant
Documents/Books/English     Karl Parker   Worldeater

问题是:如何将数据帧转换为以路径结构为索引的多索引数据帧?我看到的问题是在不失去对数据的绑定的情况下更改索引。

根据您的原始问题和编辑,这是后续解决方案。使用来自 , and the ideas from :

的解析

我们采用现有路径列,将其拆分为 / 并将其转换为列表,然后使用这些列表值创建新列。

然后我们使用这些列作为新索引。

df

    path                    author          title
0   Documents/Books/German  Kerstin_Gier    Rubinrot
1   Documents/Articles/English  Kim_Ralls   Midnight_Rain
2   Documents/Books/English Eva_Corets  Maeve_Ascendant
3   Documents/Books/English Karl_Parker Worldeater

df[['cat','type','lang']]=pd.DataFrame(df['path'].str.split('/').values.tolist(), index=df.index)

df

    path                    author          title       cat         type    lang
0   Documents/Books/German  Kerstin_Gier    Rubinrot    Documents   Books   German
1   Documents/Articles/English  Kim_Ralls   Midnight_Rain   Documents   Articles    English
2   Documents/Books/English Eva_Corets  Maeve_Ascendant Documents   Books   English
3   Documents/Books/English Karl_Parker Worldeater  Documents   Books   English

df.set_index(['cat','type','lang'])

                                path                    author          title
cat         type        lang            
Documents   Books       German  Documents/Books/German  Kerstin_Gier    Rubinrot
            Articles    English Documents/Articles/English  Kim_Ralls   Midnight_Rain
            Books       English Documents/Books/English Eva_Corets  Maeve_Ascendant
                        English     Documents/Books/English Karl_Parker Worldeater

从那里,显然你可以 drop 如果需要路径