2017-08-13 7 views
0

XMLファイルからこのような複数のタプルを返すforループを作成しました。複数のタプルをパンダのデータフレームに変換する方法

(a, b, c) 
(a, b, c) 
(a, b, c) 
(a, b, c) 
........ 

XMLファイルは、B & cは同じ子タグの下にあるようなものである:それは次のようになります。そして、すべてのas、bs、およびcsはそれぞれ同じデータ型です。それはそのようなもので、なぜ私が理解

[(a, b, c), (a, b, c)] 
[(a, b, c)] 
[(a, b, c), (a, b, c) ... ] 
........ 

:私は、それぞれの空のリストに追加さzは= []、forループと同じネストされた中z.append(YYY)で、私はこのような何かを取得保管なってみましたおそらく各リストはXMLツリーの同じ子タグに結び付けられているからです。私はパンダデータフレームにそれを変換可能にするために

[(a, b, c), (a, b, c), (a, b, c), (a, b, c), ....] 

:しかし、私が望んでいたことはちょうどこのようなタプルのリストを持っていることでした。それをする最善の方法は何ですか?リストを作ることなくタプルから直接行う方法はありますか?ありがとうございました。私のコードの スニペットは、このようです:

for x in root.findall('xyz'): 
    y = x.abc[-1] 
    z = [] 
    for s in x.iter('xxx'): 
     yyy = s.text, s.attrib['zzz'], y 
     z.append(yyy) 
    print(z) 

注:ABCは、XYZの子要素であり、xxxは、XYZの別の子要素です。 zzzは、xxx要素タグの属性です。また、xxxはドキュメント内で異なります。つまり、xyz要素の下に複数の要素がある可能性があります。しかし

<root> 
    <xyz> 
     <abc>...</abc> 
     <abc>...</abc> 
     <abc>c</abc> 
     <xxx zzz='b'>a</xxx> 
    </xyz> 
    <xyz> 
     <abc>...</abc> 
     <abc>...</abc> 
     <abc>c</abc> 
     <xxx zzz='b'>a</xxx> 
     <xxx zzz='b'>a</xxx> 
    </xyz> 
    ...... 
</root> 

答えて

0

、私はこのようなタプルのリストを持っているだけだった何を望むか:

[(A、B、C)、(

XMLは次のようになります

1つのリスト内のすべてのタプルを取得するには、空のタイルを初期化する必要があります(例:すべてのループの外側にzをリストする:

z = [] 
for x in root.findall('xyz'): 
    y = x.findall('abc')[-1] 
    for s in x.iter('xxx'): 
     yyy = s.text, s.attrib['zzz'], y.text 
     z.append(yyy) 

print(z) 

そこから、あなたのデータを簡単にパンダのデータフレームに変換できるはずです。がんばろう!

+0

私はC++とJavaのように、通常forループが初期化されているので、私にはそれがないということはありませんでした。私はPythonでかなり速くスピードアップできることを願っています。正しい方向に私を指してくれてありがとう@MathiasL。 –

関連する問題