ich Pandas Datenrahmen, die ich von Daten in einer XML-Datei gespeichert erstellt haben:Ändern der dtype für bestimmte Spalten in einer Pandas Datenrahmen
Zunächst wird die xlm Datei geöffnet wird und analysiert
xmlData = etree.parse(filename)
trendData = xmlData.findall("//TrendData")
I ein Verzeichnis erstellt, die alle Datennamen aufgelistet (die als Spaltennamen verwendet werden) als Schlüssel und gibt die Position der Daten in der xML-Datei:
Parameters = {"TreatmentUnit":("Worklist/AdminData/AdminValues/TreatmentUnit"),
"Modality":("Worklist/AdminData/AdminValues/Modality"),
"Energy":("Worklist/AdminData/AdminValues/Energy"),
"FieldSize":("Worklist/AdminData/AdminValues/Fieldsize"),
"SDD":("Worklist/AdminData/AdminValues/SDD"),
"Gantry":("Worklist/AdminData/AdminValues/Gantry"),
"Wedge":("Worklist/AdminData/AdminValues/Wedge"),
"MU":("Worklist/AdminData/AdminValues/MU"),
"My":("Worklist/AdminData/AdminValues/My"),
"AnalyzeParametersCAXMin":("Worklist/AdminData/AnalyzeParams/CAX/Min"),
"AnalyzeParametersCAXMax":("Worklist/AdminData/AnalyzeParams/CAX/Max"),
"AnalyzeParametersCAXTarget":("Worklist/AdminData/AnalyzeParams/CAX/Target"),
"AnalyzeParametersCAXNorm":("Worklist/AdminData/AnalyzeParams/CAX/Norm"),
....}
Dies ist nur ein kleiner Teil das Verzeichnis, die eigentliche eine Liste über 80 Parameter Die Verzeichnisschlüssel dann sortiert werden:
sortedKeys = list(sorted(Parameters.keys()))
Ein Header für die Pandas Datenrahmen erstellt:
dateList=[]
dateList.append('date')
headers = dateList+sortedKeys
ich dann eine leere Pandas Datenrahmen mit dem erstellen gleiche Anzahl von Zeilen wie die Anzahl der Datensätze in trendData und mit den Spaltenüberschriften auf "headers" und dann durch die Datei durch das Füllen des Datenrahmens:
df = pd.DataFrame(index=np.arange(0,len(trendData)), columns=headers)
for a,b in enumerate(trendData):
result={}
result["date"] = dateutil.parser.parse(b.attrib['date'])
for i,j in enumerate(Parameters):
result[j] = b.findtext(Parameters[j])
df.loc[a]=(result)
df = df.set_index('date')
Dies scheint gut zu funktionieren, aber das Problem ist, dass der dtyp für jede Spalte auf 'Objekt' gesetzt ist, während die meisten Ganzzahlen sein sollten. Es ist möglich zu verwenden:
und es funktioniert gut, aber jetzt ist entzogen. Ich kann auch verwendet werden, zum Beispiel:
df.AnalyzeParametersBQFMax = pd.to_numeric(df.AnalyzeParametersBQFMax)
auf einzelne Spalten zu konvertieren. Aber gibt es eine Möglichkeit, pd.to_numeric mit einer Liste von Spaltennamen zu verwenden. Ich kann eine Liste von Spalten erstellen, die ganzzahlig sein sollten.
int64list=[]
for q in sortedKeys:
if q.startswith("AnalyzeParameters"):
int64list.append(q)
aber kann keine Möglichkeit finden, diese Liste an die Funktion zu übergeben.
Dank. Es funktionierte gut, obwohl ich verwenden musste: daten ['datum'] = daten ['datum']. Astype ('float') lieber als int64 aus irgendeinem grund – Trigfa
Froh, ich könnte helfen! –