2016-08-25 3 views
1

다음은 내 XML 문서입니다.사용자 지정 XML을 JSON 또는 Pandas DataFrame으로 구문 분석하십시오. (파이썬)

<BizTalk xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
<Body> 
<QUEUE> 
    <FILTER FILTERNAME="CorrectAddress" VALUE="1" /> 
    <FILTER FILTERNAME="DaysSinceLastTracking" VALUE="0" /> 
    <FILTER FILTERNAME="DaysSinceShipped" VALUE="3" /> 
    <FILTER FILTERNAME="DaysUntilDelivered" VALUE="735101" /> 
    <FILTER FILTERNAME="DeliveryStatus" VALUE="IN_TRANSIT" /> 
    <FILTER FILTERNAME="Division" VALUE="71" /> 
    <FILTER FILTERNAME="EmptyBox" VALUE="0" /> 
    <FILTER FILTERNAME="FedVendInstructions" VALUE="" /> 
    <FILTER FILTERNAME="ItemDescription" VALUE="bla bla bla" /> 
    <FILTER FILTERNAME="ItemIssue" VALUE="Damaged" /> 
    <FILTER FILTERNAME="ItemValue" VALUE="50" /> 
    <FILTER FILTERNAME="PiecedSet" VALUE="0" /> 
    <FILTER FILTERNAME="HasProofOfDelivery" VALUE="0" /> 
    <FILTER FILTERNAME="RecievedPOD" VALUE="0" /> 
    <FILTER FILTERNAME="RequestedAction" VALUE="Reship" /> 
    <FILTER FILTERNAME="HasReturntracking" VALUE="0" /> 
    <FILTER FILTERNAME="IsStandardFillLocation" VALUE="1" /> 
    <FILTER FILTERNAME="Tampered" VALUE="0" /> 
    <FILTER FILTERNAME="HasTracking" VALUE="1" /> 
    <FILTER FILTERNAME="ShortName" VALUE="BDD" /> 
    <FILTER FILTERNAME="IsBOPS" VALUE="0" /> 
    <FILTER FILTERNAME="WrongItemType" VALUE="" /> 
</QUEUE> 
<RESPONSEDATA> 
    <ITEMS> 
    <DATA CanReOrder="1" UPC="xxxxxxx" Quantity="1" LineNumber="1" Description="bla bla bla" /> 
    </ITEMS> 
    <DATA ITEM="Reservation" VALUE="????????" /> 
    <DATA ITEM="ShipmentNumber" VALUE="1" /> 
    <DATA ITEM="ContactedBy" VALUE="Shipping Customer" /> 
    <DATA ITEM="PackageRecieved" VALUE="1" /> 
    <DATA ITEM="CheckedEverywhere" VALUE="0" /> 
</RESPONSEDATA> 

어떻게 팬더 DataFrame이 사용자 정의 XML을 변환합니까?

은 내가 ELementTree를 사용하여 팬더에 요소 트리 객체의 목록을 통과 노력

"STR 객체 속성 태그가 없습니다"오류를 던졌습니다 xmljson를 사용하여 일부 미리 정의 된 coversions을 시도하고 빈 던졌습니다 Dataframe :

etree = ET.fromstring(xml_data) 
df = pd.DataFrame(list(etree)) 
print(df) 

나는 현재의 필드로 사용자 정의 열 이름으로는 FilterName에 소요 파서,과 가치를 쓸 계획입니다,하지만 하드 코딩입니다. 나는 더 많은 필드가 추가되는 것처럼 앞으로 이런 일이 발생하지 않도록하고 싶다. 수동으로 필드를 추가해야하는 번거 로움이있다.

각 줄마다 반복 할 수있는 방법이 있습니까 (루프로 열기를 사용하여 수행 할 수 있습니다). 그리고 Pandas DataFrame에 동적으로 열을 추가 하시겠습니까?

아니면 효율적인 방법이 있습니까?

참고 : W3Schools에서 XML의 유효성을 검사했으며 오류가 발견되지 않았다고 말하므로 XML이 유효하다고 생각합니다.

감사합니다.

답변

1

차가워서, 나는 이것에 대한 해결책을 발견했습니다.

df = pd.DataFrame() 

etree = ET.fromstring(xml_data) 
# root = etree.getroot() 
for node in etree.findall('.//FILTER'): 
    parent = node.attrib.get('FILTERNAME') 
    child = node.attrib.get('VALUE') 

    col_name = parent 
    val = child 

    df[col_name] = [val] 

인쇄 (DF)

그냥 게시하는 사람이 유사한 문제를 향하도록, 그것은 도움이 될 수 원 : 나는 다음과 같은했다. 감사합니다.

관련 문제