2016-09-22 3 views
1

나는에 DataFrame을 가지고 있는데 그 중 하나의 열은 XML 문자열입니다. 내가 뭘하고 싶은 건 정규화 된 양식의 열 이름을 가진 XML 노드 각각에 대해 하나의 열을 만드는 것입니다. 예를 들어,pandas 데이터 프레임 열과 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 문자열을 팬더 Series으로 변환해야합니다 (끝 부분에 항상 동일한 양의 열이 있다는 가정하에). 이것은 예를 들어, 달성 할 수

def convert_xml(raw): 
    # some etree xml mangling 

: 그래서 당신은 같은 기능이 필요합니다 Python에서 etree 패키지를 사용합니다. 반환되는 시리즈에는 인덱스가 있어야합니다. 인덱스의 각 항목은 표시 할 새 열 이름입니다 (예 : 귀하의 예를 들면 다음과 같습니다

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) 
:

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

이 기능을 감안할 때, 당신은 (는 XML 맹 글링을 멀리 조롱) 팬더와 함께 다음과 같은 작업을 수행 할 수