Ich habe es geschafft, einen funktionierenden Code in R zu schreiben (XML-Paket, Code ist chaotisch), aber dann wurde mir klar, dass es in Python vielleicht noch einfacher ist. Ich habe aus meinem ursprünglichen Datensatz einige gefälschte Daten generiert und mit dem folgenden Code herumgespielt. Bitte beachten Sie, dass meine Originaldaten viel größer sind (mehr als 1000 Einträge). Wie Sie sehen können, gibt es am Anfang und am Ende einige Daten, die nicht zum Hauptteil der Daten gehören. Der Code funktioniert gut für diese synthetisierten kleineren Daten, aber als ich meine Originaldaten eingegeben habe, wurde mir immer wieder die folgende Fehlermeldung angezeigt. Ich würde mich wirklich über jede Hilfe freuen.
Code: Select all
import xml.etree.ElementTree as ET
import pandas as pd
# Parse XML file
tree = ET.parse("/mnt/data/pasted.txt")
root = tree.getroot()
# -------------------------
# 1. Extract column names
# -------------------------
headers = []
header_node = root.find("header")
for item in header_node.findall("item"):
headers.append(item.get("name"))
# -------------------------
# 2. Extract row data
# -------------------------
rows = []
data_node = root.find("data")
for row in data_node.findall("row"):
row_values = []
for value in row.findall("value"):
# Handle xs:nil="true"
if value.attrib.get("{http://www.w3.org/2001/XMLSchema-instance}nil") == "true":
row_values.append(None)
else:
row_values.append(value.text)
rows.append(row_values)
# -------------------------
# 3. Create DataFrame
# -------------------------
df = pd.DataFrame(rows, columns=headers)
# View result
print(df)
Code: Select all
summary
previous total
15
current total
25
type
total
25
A1
M
1980-03-12
45
Red Orange
2000-01-19
20002-01-02
21
2000-01-03
2020-01-13
13
-0.50
A2
M
1975-07-05
50
Stony Rock
1999-01-10
1980-10-01
2000-01-12
30
3
RND
error
weight
weight change
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
Cell In[9], line 14
11 headers = []
12 header_node = root.find("header")
---> 14 for item in header_node.findall("item"):
15 headers.append(item.get("name"))
17 # -------------------------
18 # 2. Extract row data
19 # -------------------------
AttributeError: 'NoneType' object has no attribute 'findall'
Mobile version