2016-09-22 108 views
1

我有一個DataFramepandas,其中一列是一個XML字符串。我想要做的是爲標準化形式的列名稱的每個xml節點創建一列。例如,將帶有xml數據的熊貓數據框列轉換爲標準化列?

id xmlcolumn 
    1  <main attr1='abc' attr2='xyz'><item><prop1>text1</prop1><prop2>text2</prop2></item></main> 
    2  <main ........</main> 

我想將其轉換爲數據幀像這樣:

id main.attr1 main.attr2 main.item.prop1 main.item.prop2 
1  abc  xyz   text1   text2 
2  ..... 

我該怎麼做,同時仍保持現有列在DataFrame

回答

0

需要完成的第一步是將XML字符串轉換爲pandas Series(假設最終總是有相同數量的列)。所以你需要一個功能,如:

def convert_xml(raw): 
    # some etree xml mangling 

這可以實現,例如,在python中使用etree包。返回的系列必須具有索引,其中索引中的每個條目是要出現的新列名稱,例如,您例如:

pd.Series(['abc', 'xyz'], index=['main.attr1', 'main.attr2']) 

鑑於此功能,你可以用大熊貓(嘲諷掉XML的mangling)以下:

frame = pd.DataFrame({'keep': [42], 'xml': '<foo></foo>'}) 
temp = frame['xml'].apply(convert_xml) 
frame = frame.drop('xml', axis=1) 
frame = pd.concat([frame, temp], axis=1)