我有我已經從存儲在XML文件中的數據創建的熊貓數據幀:更改爲特定的列的D型細胞在大熊貓數據幀
最初XLM文件被打開和解析
xmlData = etree.parse(filename)
trendData = xmlData.findall("//TrendData")
我創建一個目錄列出所有數據的名稱(用作列名)作爲鍵並給出了在XML文件中的數據的位置:
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"),
....}
這只是一小部分的目錄,實際一個列表80個參數 目錄密鑰然後排序:
sortedKeys = list(sorted(Parameters.keys()))
甲頭的熊貓數據幀創建的:
dateList=[]
dateList.append('date')
headers = dateList+sortedKeys
我然後創建具有一個空的熊貓數據幀與trendData中的記錄數相同的行數並且列標題設置爲'標題',然後通過填充數據幀的文件循環:
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')
這似乎工作正常,但問題是,每個colum的dtype設置爲'對象',而大多數應該是整數。它可以使用:
df.convert_objects(convert_numeric=True)
它工作正常,但現在被depricated。 我也可以使用,例如:
df.AnalyzeParametersBQFMax = pd.to_numeric(df.AnalyzeParametersBQFMax)
轉換單個列。但有沒有一種使用pd.to_numeric與列名列表的方式。我可以創建一個列應該是整數使用以下列表;
int64list=[]
for q in sortedKeys:
if q.startswith("AnalyzeParameters"):
int64list.append(q)
但無法找到一種方法將此列表傳遞給函數。
感謝。它運作良好,雖然我不得不使用: data ['date'] = data ['date']。astype('float') 而不是int64由於某種原因 – Trigfa
很高興我能幫忙! –