將 XML 檔案轉換為 Pandas DataFrame

Luqman Khan 2023年1月30日 2022年5月16日
  1. 將 XML 檔案轉換為 Pandas DataFrame
  2. まとめ
將 XML 檔案轉換為 Pandas DataFrame

本教程將介紹如何將 XML 檔案轉換為 Python Pandas DataFrame。我們將使用 xml.etree.ElementTree 庫。

將 XML 檔案轉換為 Pandas DataFrame

XML 是一種標記語言,用於表達和傳播有時難以使用更傳統的表格格式生成的資料結構。

以下是將 XML 檔案轉換為 Pandas DataFrame 的步驟。

建立 XML 檔案

<data>
    <student name="John">
        <email>john@mail.com</email>
        <grade>A</grade>
        <age>16</age>
    </student>
    <student name="Alice">
        <email>alice@mail.com</email>
        <grade>B</grade>
        <age>17</age>
    </student>
    <student name="Bob">
        <email>bob@mail.com</email>
        <grade>C</grade>
        <age>16</age>
    </student>
    <student name="Hannah">
        <email>hannah@mail.com</email>
        <grade>A</grade>
        <age>17</age>
    </student>
</data>

在此示例中,每個學生都由一個具有包含學生姓名的 name 屬性的 <student> 元素表示。

這些元素中的每一個都進一步細分為由 <email><grade><age> 標籤定義的子元素,實際資料內容指的是給定學生的落在這些標籤之間。

假設此資料儲存在名為 students.xml 的 XML 檔案中。

import xml.etree.ElementTree as et
xtree = et.parse("/content/drive/MyDrive/ABC/student.xml")
xroot = xtree.getroot()

在樹上迴圈

我們現在可以遍歷樹,獲取每個學生元素、它的 name 屬性和它的子元素來生成我們的 DataFrame。

for node in xroot:
    s_name = node.attrib.get("name")
    s_mail = node.find("email").text
    s_grade = node.find("grade").text
    s_age = node.find("age").text

attrib.get() 函式用於獲取名稱屬性,而每個元素的文字內容可以使用節點的 find() 函式獲取。

每次迭代都會產生一個資料集,該資料集可以被視為 Pandas DataFrame 中的一個觀察值。這個過程可以構建如下:

import pandas as pd
import xml.etree.ElementTree as et

xtree = et.parse("/content/drive/MyDrive/ABC/student.xml")
xroot = xtree.getroot()

df_cols = ["name", "email", "grade", "age"]
rows = []

for node in xroot:
    s_name = node.attrib.get("name")
    s_mail = node.find("email").text if node is not None else None
    s_grade = node.find("grade").text if node is not None else None
    s_age = node.find("age").text if node is not None else None

    rows.append({"name": s_name, "email": s_mail,
                 "grade": s_grade, "age": s_age})

out_df = pd.DataFrame(rows, columns = df_cols)

使用這種技術的缺點是你必須提前知道 XML 檔案的結構並相應地硬編碼列名。我們可以嘗試將這段程式碼修改為更實用、適應性更強的函式,不需要任何硬編碼值:

out_df

當我們對 students.xml 檔案使用解析 XML("students.xml", ["name", "email", "grade", "age"]) 時,我們得到如下所示的表格。

     name     email             grade   age
0    John     john@mail.com     A       16
1    Alice    alice@mail.com    B       17
2    Bob      bob@mail.com      C       16
3    Hannah   hannah@mail.com   A       17

まとめ

雖然我們仍然需要知道我們希望解析的輸入 XML 文件的基本結構,但這是一種更有效的 XML 解析功能實現。

相關文章 - Pandas DataFrame