パンダread_xml()メソッドのテスト戦略

| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |

現在、パンダI/Oツールは read_xml()メソッドと対応するto_xml()。ただし、 read_json ツリーのような構造をデータフレームのインポートとに実装できることを証明しますマークアップ形式の場合はread_html

パンダチームが将来のパンダバージョンでこのようなread_xmlメソッドを検討する場合、どのような実装になりますか。追求:組み込みの xml.etree.ElementTree とそのiterfind()またはiterparse()関数、またはサードパーティモジュールを使用した解析XPath1.0およびXSLT1.0メソッドを使用したlxml

以下は、単純でフラットな要素中心のXML入力に対する4つのメソッドタイプのテスト実行です。すべては、rootの第2レベルの子の一般化された解析用に設定されており、各メソッドはまったく同じpandasデータフレームを生成する必要があります。辞書のリストで最後を除くすべてがpd.Dataframe()を呼び出します。 XSLTメソッドは、 pd.read_csv()でキャストされたStringIO()のXMLをCSVに変換します。

質問(マルチパート)

  • パフォーマンス:ファイルが繰り返し解析されるため、大きなファイルによく推奨される低速の iterparse をどのように説明しますか? if ロジックチェックが原因の1つですか?

  • メモリ:CPUメモリはI / O呼び出しのタイミングと相関関係がありますか? XSLTおよびXPath1.0は、ファイル全体を解析するためにメモリ内で読み取る必要があるため、大きなXMLドキュメントでは適切に拡張できない傾向があります。

  • 戦略:辞書のリストは Dataframe()呼び出し?次の興味深い回答をご覧ください:ジェネレーターバージョンとiterwalkユーザー定義バージョン。両方のアップキャストリストをデータフレームに追加します。

入力データ(StackOverflowの現在のパンダの友達が含まれている年別のトップユーザー)

 &lt ;? xml version = "1.0" encoding = "utf-8"?&gt;&lt; stackoverflow&gt;&lt; topusers&gt;&lt; user&gt; Gordon Linoff&lt; / user&gt;&lt; link&gt; http://www.stackoverflow.com//users / 1144035 / gordon-linoff&lt; / link&gt;&lt; location&gt; New York、United States&lt; / location&gt;&lt; year_rep&gt; 5,985&lt; / year_rep&gt;&lt; total_rep&gt; 499,408&lt; / total_rep&gt;&lt; tag1&gt; sql&lt; / tag1&gt;&lt; tag2&gt; sql-server&lt; / tag2&gt;&lt; tag3&gt; mysql&lt; / tag3&gt;&lt; / topusers&gt;&lt; topusers&gt;&lt; user&gt;G√ºnterZ√∂chbauer&lt; / user&gt;&lt; link&gt http://www.stackoverflow.com//users/217408/g%c3%bcnter-z%c3%b6chbauer</link>&lt; location&gt; Linz、Austria&lt; / location&gt;&lt; year_rep&gt; 5,835&lt; / year_rep&gt ;&lt; total_rep&gt; 154,4 39&lt; / total_rep&gt; &lt; tag1&gt; angle2&lt; / tag1&gt; &lt; tag2&gt; typescript&lt; / tag2&gt; &lt; tag3&gt; javascript&lt; / tag3&gt; &lt; / topusers&gt; &lt; topusers&gt; &lt; user&gt; jezrael&lt; / user&gt; &lt; link&gt; http://www.stackoverflow.com//users/2901002/jezrael< / link&gt; &lt; location&gt;ブラチスラバ、スロバキア&lt; / location&gt; &lt; year_rep&gt; 5,740&lt; / year_rep&gt; &lt; total_rep&gt; 83,237&lt; / total_rep&gt; &lt; tag1&gt;パンダ&lt; / tag1&gt; &lt; tag2&gt; python&lt; / tag2&gt; &lt; tag3&gt; dataframe&lt; / tag3&gt; &lt; / topusers&gt; &lt; topusers&gt; &lt; user&gt; VonC&lt; / user&gt; &lt; link&gt; http://www.stackoverflow.com//users/6309/vonc< / link&gt; &lt; location&gt; France&lt; / location&gt; &lt; year_rep&gt; 5,577&lt; / year_rep&gt; &lt; total_rep&gt; 651,397&lt; / total_rep&gt; &lt; tag1&gt; git&lt; / tag1&gt; &lt; tag2&gt; github&lt; / tag2&gt; &lt; tag3&gt; docker&lt; / tag3&gt; &lt; / topusers&gt; &lt; topusers&gt; &lt; user&gt; Martijn Pieters&lt; / user&gt; &lt; link&gt; http://www.stackoverflow.com//users/100297/martijn-pieters< / link&gt; &lt; location&gt;イギリス、ケンブリッジ&lt; / location&gt; &lt; year_rep&gt; 5,337&lt; / year_rep&gt; &lt; total_rep&gt; 525,176&lt; / total_rep&gt; &lt; tag1&gt; python&lt; / tag1&gt; &lt; tag2&gt; python-3.x&lt; / tag2&gt; &lt; tag3&gt; python-2.7&lt; / tag3&gt; &lt; / topusers&gt; &lt; topusers&gt; &lt; user&gt; TJクラウダー&lt; / user&gt; &lt; link&gt; http://www.stackoverflow.com//users/157247/tj-crowder< / link&gt; &lt; location&gt;イギリス&lt; / location&gt; &lt; year_rep&gt; 5,258&lt; / year_rep&gt; &lt; total_rep&gt; 508,310&lt; / total_rep&gt; &lt; tag1&gt; javascript&lt; / tag1&gt; &lt; tag2&gt; jquery&lt; / tag2&gt; &lt; tag3&gt; java&lt; / tag3&gt; &lt; / topusers&gt; &lt; topusers&gt; &lt; user&gt; akrun&lt; / user&gt; &lt; link&gt; http://www.stackoverflow.com//users/3732271/akrun< / link&gt; &lt; location&gt;&lt; / location&gt; &lt; year_rep&gt; 5,188&lt; / year_rep&gt; &lt; total_rep&gt; 229,553&lt; / total_rep&gt; &lt; tag1&gt; r&lt; / tag1&gt; &lt; tag2&gt; dplyr&lt; / tag2&gt; &lt; tag3&gt; dataframe&lt; / tag3&gt; &lt; / topusers&gt; &lt; topusers&gt; &lt; user&gt; Wiktor Stribi?ew&lt; / user&gt; &lt; link&gt; http://www.stackoverflow.com//users/3832970/wiktor-stribi%c5%bcew< / link&gt; &lt; location&gt;ポーランド、ワルシャワ&lt; / location&gt; &lt; year_rep&gt; 4,948&lt; / year_rep&gt; &lt; total_rep&gt; 158,134&lt; / total_rep&gt; &lt; tag1&gt;正規表現&lt; / tag1&gt; &lt; tag2&gt; javascript&lt; / tag2&gt; &lt; tag3&gt; c#&lt; / tag3&gt; &lt; / topusers&gt; &lt; topusers&gt; &lt; user&gt; Darin Dimitrov&lt; / user&gt; &lt; link&gt; http://www.stackoverflow.com//users/29407/darin-dimitrov< / link&gt; &lt; location&gt;ソフィア、ブルガリア&lt; / location&gt; &lt; year_rep&gt; 4,936&lt; / year_rep&gt; &lt; total_rep&gt; 709,683&lt; / total_rep&gt; &lt; tag1&gt; c#&lt; / tag1&gt; &lt; tag2&gt; asp.net-mvc&lt; / tag2&gt; &lt; tag3&gt; asp.net-mvc-3&lt; / tag3&gt; &lt; / topusers&gt; &lt; topusers&gt; &lt; user&gt; Eric Duminil&lt; / user&gt; &lt; link&gt; http://www.stackoverflow.com//users/6419007/eric-duminil< / link&gt; &lt; location&gt;&lt; / location&gt; &lt; year_rep&gt; 4,854&lt; / year_rep&gt; &lt; total_rep&gt; 12,557&lt; / total_rep&gt; &lt; tag1&gt; ruby&lt; / tag1&gt; &lt; tag2&gt; ruby-on-rails&lt; / tag2&gt; &lt; tag3&gt; array&lt; / tag3&gt; &lt; / topusers&gt; &lt; topusers&gt; &lt; user&gt; alecxe&lt; / user&gt; &lt; link&gt; http://www.stackoverflow.com//users/771848/alecxe< / link&gt; &lt; location&gt;ニューヨーク、アメリカ合衆国&lt; / location&gt; &lt; year_rep&gt; 4,723&lt; / year_rep&gt; &lt; total_rep&gt; 233,368&lt; / total_rep&gt; &lt; tag1&gt; python&lt; / tag1&gt; &lt; tag2&gt;セレン&lt; / tag2&gt; &lt; tag3&gt;分度器&lt; / tag3&gt; &lt; / topusers&gt; &lt; topusers&gt; &lt; user&gt;Jean-Fran√ßoisFabre&lt; / user&gt; &lt; link&gt; http://www.stackoverflow.com//users/6451573/jean-fran%c3%a7ois-fabre< / link&gt; &lt; location&gt;フランス、トゥールーズ&lt; / location&gt; &lt; year_rep&gt; 4,526&lt; / year_rep&gt; &lt; total_rep&gt; 30,027&lt; / total_rep&gt; &lt; tag1&gt; python&lt; / tag1&gt; &lt; tag2&gt; python-3.x&lt; / tag2&gt; &lt; tag3&gt; python-2.7&lt; / tag3&gt; &lt; / topusers&gt; &lt; topusers&gt; &lt; user&gt; piRSquared&lt; / user&gt; &lt; link&gt; http://www.stackoverflow.com//users/2336654/pirsquared< / link&gt; &lt; location&gt; Bellevue、WA、United States&lt; / location&gt; &lt; year_rep&gt; 4,482&lt; / year_rep&gt; &lt; total_rep&gt; 41,183&lt; / total_rep&gt; &lt; tag1&gt;パンダ&lt; / tag1&gt; &lt; tag2&gt; python&lt; / tag2&gt; &lt; tag3&gt; dataframe&lt; / tag3&gt; &lt; / topusers&gt; &lt; topusers&gt; &lt; user&gt; CommonsWare&lt; / user&gt; &lt; link&gt; http://www.stackoverflow.com//users/115145/commonsware< / link&gt; &lt; location&gt;誰が知りたいですか?&lt; / location&gt; &lt; year_rep&gt; 4,475&lt; / year_rep&gt; &lt; total_rep&gt; 616,135&lt; / total_rep&gt; &lt; tag1&gt; android&lt; / tag1&gt; &lt; tag2&gt; java&lt; / tag2&gt; &lt; tag3&gt; android-intent&lt; / tag3&gt; &lt; / topusers&gt; &lt; topusers&gt; &lt; user&gt; Quentin&lt; / user&gt; &lt; link&gt; http://www.stackoverflow.com//users/19068/quentin< / link&gt; &lt; location&gt;イギリス&lt; / location&gt; &lt; year_rep&gt; 4,464&lt; / year_rep&gt; &lt; total_rep&gt; 509,365&lt; / total_rep&gt; &lt; tag1&gt; javascript&lt; / tag1&gt; &lt; tag2&gt; html&lt; / tag2&gt; &lt; tag3&gt; css&lt; / tag3&gt; &lt; / topusers&gt; &lt; topusers&gt; &lt; user&gt; Jon Skeet&lt; / user&gt; &lt; link&gt; http://www.stackoverflow.com//users/22656/jon-skeet< / link&gt; &lt; location&gt; Reading、United Kingdom&lt; / location&gt; &lt; year_rep&gt; 4,348&lt; / year_rep&gt; &lt; total_rep&gt; 921,690&lt; / total_rep&gt; &lt; tag1&gt; c#&lt; / tag1&gt; &lt; tag2&gt; java&lt; / tag2&gt; &lt; tag3&gt; .net&lt; / tag3&gt; &lt; / topusers&gt; &lt; topusers&gt; &lt; user&gt; Felix Kling&lt; / user&gt; &lt; link&gt; http://www.stackoverflow.com//users/218196/felix-kling< / link&gt; &lt; location&gt;カリフォルニア州サニーベール&lt; / location&gt; &lt; year_rep&gt; 4,324&lt; / year_rep&gt; &lt; total_rep&gt; 411,535&lt; / total_rep&gt; &lt; tag1&gt; javascript&lt; / tag1&gt; &lt; tag2&gt; jquery&lt; / tag2&gt; &lt; tag3&gt;非同期&lt; / tag3&gt; &lt; / topusers&gt; &lt; topusers&gt; &lt; user&gt; matt&lt; / user&gt; &lt; link&gt; http://www.stackoverflow.com//users/341994/matt< / link&gt; &lt; location&gt;&lt; / location&gt; &lt; year_rep&gt; 4,313&lt; / year_rep&gt; &lt; total_rep&gt; 220,515&lt; / total_rep&gt; &lt; tag1&gt; swift&lt; / tag1&gt; &lt; tag2&gt; ios&lt; / tag2&gt; &lt; tag3&gt; xcode&lt; / tag3&gt; &lt; / topusers&gt; &lt; topusers&gt; &lt; user&gt; Psidom&lt; / user&gt; &lt; link&gt; http://www.stackoverflow.com//users/4983450/psidom< / link&gt; &lt; location&gt;ジョージア州アトランタ&lt; / location&gt; &lt; year_rep&gt; 4,236&lt; / year_rep&gt; &lt; total_rep&gt; 36,950&lt; / total_rep&gt; &lt; tag1&gt; python&lt; / tag1&gt; &lt; tag2&gt;パンダ&lt; / tag2&gt; &lt; tag3&gt; r&lt; / tag3&gt; &lt; / topusers&gt; &lt; topusers&gt; &lt; user&gt; Martin R&lt; / user&gt; &lt; link&gt; http://www.stackoverflow.com//users/1187415/martin-r< / link&gt; &lt; location&gt;ドイツ&lt; / location&gt; &lt; year_rep&gt; 4,195&lt; / year_rep&gt; &lt; total_rep&gt; 269,380&lt; / total_rep&gt; &lt; tag1&gt; swift&lt; / tag1&gt; &lt; tag2&gt; ios&lt; / tag2&gt; &lt; tag3&gt; swift3&lt; / tag3&gt; &lt; / topusers&gt; &lt; topusers&gt; &lt; user&gt; Barmar&lt; / user&gt; &lt; link&gt; http://www.stackoverflow.com//users/1491895/barmar< / link&gt; &lt; location&gt;マサチューセッツ州アーリントン&lt; / location&gt; &lt; year_rep&gt; 4,179&lt; / year_rep&gt; &lt; total_rep&gt; 289,989&lt; / total_rep&gt; &lt; tag1&gt; javascript&lt; / tag1&gt; &lt; tag2&gt; php&lt; / tag2&gt; &lt; tag3&gt; jquery&lt; / tag3&gt; &lt; / topusers&gt; &lt; topusers&gt; &lt; user&gt; Alexey Mezenin&lt; / user&gt; &lt; link&gt; http://www.stackoverflow.com//users/1227923/alexey-mezenin< / link&gt; &lt; location&gt; ??????&lt; / location&gt; &lt; year_rep&gt; 4,142&lt; / year_rep&gt; &lt; total_rep&gt; 31,602&lt; / total_rep&gt; &lt; tag1&gt; laravel&lt; / tag1&gt; &lt; tag2&gt; php&lt; / tag2&gt; &lt; tag3&gt; laravel-5.3&lt; / tag3&gt; &lt; / topusers&gt; &lt; topusers&gt; &lt; user&gt; BalusC&lt; / user&gt; &lt; link&gt; http://www.stackoverflow.com//users/157882/balusc< / link&gt; &lt; location&gt;オランダ、アムステルダム&lt; / location&gt; &lt; year_rep&gt; 4,046&lt; / year_rep&gt; &lt; total_rep&gt; 703,046&lt; / total_rep&gt; &lt; tag1&gt; java&lt; / tag1&gt; &lt; tag2&gt; jsf&lt; / tag2&gt; &lt; tag3&gt;サーブレット&lt; / tag3&gt; &lt; / topusers&gt; &lt; topusers&gt; &lt; user&gt; GurV&lt; / user&gt; &lt; link&gt; http://www.stackoverflow.com//users/6348498/gurv< / link&gt; &lt; location&gt;&lt; / location&gt; &lt; year_rep&gt; 4,016&lt; / year_rep&gt; &lt; total_rep&gt; 7,932&lt; / total_rep&gt; &lt; tag1&gt; sql&lt; / tag1&gt; &lt; tag2&gt; mysql&lt; / tag2&gt; &lt; tag3&gt; sql-server&lt; / tag3&gt; &lt; / topusers&gt; &lt; topusers&gt; &lt; user&gt; Nina Scholz&lt; / user&gt; &lt; link&gt; http://www.stackoverflow.com//users/1447675/nina-scholz< / link&gt; &lt; location&gt;ベルリン、ドイツ&lt; / location&gt; &lt; year_rep&gt; 3,950&lt; / year_rep&gt; &lt; total_rep&gt; 61,135&lt; / total_rep&gt; &lt; tag1&gt; javascript&lt; / tag1&gt; &lt; tag2&gt; array&lt; / tag2&gt; &lt; tag3&gt;オブジェクト&lt; / tag3&gt; &lt; / topusers&gt; &lt; topusers&gt; &lt; user&gt; JB Nizet&lt; / user&gt; &lt; link&gt; http://www.stackoverflow.com//users/571407/jb-nizet< / link&gt; &lt; location&gt;フランス、サンテティエンヌ&lt; / location&gt; &lt; year_rep&gt; 3,923&lt; / year_rep&gt; &lt; total_rep&gt; 418,780&lt; / total_rep&gt; &lt; tag1&gt; java&lt; / tag1&gt; &lt; tag2&gt; hibernate&lt; / tag2&gt; &lt; tag3&gt; java-8&lt; / tag3&gt; &lt; / topusers&gt; &lt; topusers&gt; &lt; user&gt; Frank van Puffelen&lt; / user&gt; &lt; link&gt; http://www.stackoverflow.com//users/209103/frank-van-puffelen< / link&gt; &lt; location&gt; San Francisco、CA&lt; / location&gt; &lt; year_rep&gt; 3,920&lt; / year_rep&gt; &lt; total_rep&gt; 86,520&lt; / total_rep&gt; &lt; tag1&gt; firebase&lt; / tag1&gt; &lt; tag2&gt; firebase-database&lt; / tag2&gt; &lt; tag3&gt; android&lt; / tag3&gt; &lt; / topusers&gt; &lt; topusers&gt; &lt; user&gt; dasblinkenlight&lt; / user&gt; &lt; link&gt; http://www.stackoverflow.com//users/335858/dasblinkenlight< / link&gt; &lt; location&gt; United States&lt; / location&gt; &lt; year_rep&gt; 3,886&lt; / year_rep&gt; &lt; total_rep&gt; 475,813&lt; / total_rep&gt; &lt; tag1&gt; c#&lt; / tag1&gt; &lt; tag2&gt; java&lt; / tag2&gt; &lt; tag3&gt; c ++&lt; / tag3&gt; &lt; / topusers&gt; &lt; topusers&gt; &lt; user&gt; Tim Biegeleisen&lt; / user&gt; &lt; link&gt; http://www.stackoverflow.com//users/1863229/tim-biegeleisen< / link&gt; &lt; location&gt;シンガポール&lt; / location&gt; &lt; year_rep&gt; 3,814&lt; / year_rep&gt; &lt; total_rep&gt; 77,211&lt; / total_rep&gt; &lt; tag1&gt; sql&lt; / tag1&gt; &lt; tag2&gt; mysql&lt; / tag2&gt; &lt; tag3&gt; java&lt; / tag3&gt; &lt; / topusers&gt; &lt; topusers&gt; &lt; user&gt; Greg Hewgill&lt; / user&gt; &lt; link&gt; http://www.stackoverflow.com//users/893/greg-hewgill< / link&gt; &lt; location&gt;ニュージーランド、クライストチャーチ&lt; / location&gt; &lt; year_rep&gt; 3,796&lt; / year_rep&gt; &lt; total_rep&gt; 529,137&lt; / total_rep&gt; &lt; tag1&gt; git&lt; / tag1&gt; &lt; tag2&gt; python&lt; / tag2&gt; &lt; tag3&gt; git-pull&lt; / tag3&gt; &lt; / topusers&gt; &lt; topusers&gt; &lt; user&gt; unutbu&lt; / user&gt; &lt; link&gt; http://www.stackoverflow.com//users/190597/unutbu< / link&gt; &lt; location&gt;&lt; / location&gt; &lt; year_rep&gt; 3,735&lt; / year_rep&gt; &lt; total_rep&gt; 401,595&lt; / total_rep&gt; &lt; tag1&gt; python&lt; / tag1&gt; &lt; tag2&gt;パンダ&lt; / tag2&gt; &lt; tag3&gt; numpy&lt; / tag3&gt; &lt; / topusers&gt; &lt; topusers&gt; &lt; user&gt; Hans Passant&lt; / user&gt; &lt; link&gt; http://www.stackoverflow.com//users/17034/hans-passant< / link&gt; &lt; location&gt;ウィスコンシン州マディソン&lt; / location&gt; &lt; year_rep&gt; 3,688&lt; / year_rep&gt; &lt; total_rep&gt; 672,118&lt; / total_rep&gt; &lt; tag1&gt; c#&lt; / tag1&gt; &lt; tag2&gt; .net&lt; / tag2&gt; &lt; tag3&gt; winforms&lt; / tag3&gt; &lt; / topusers&gt; &lt; topusers&gt; &lt; user&gt; Jonathan Leffler&lt; / user&gt; &lt; link&gt; http://www.stackoverflow.com//users/15168/jonathan-leffler< / link&gt; &lt; location&gt;米国カリフォルニア州&lt; / location&gt; &lt; year_rep&gt; 3,649&lt; / year_rep&gt; &lt; total_rep&gt; 455,157&lt; / total_rep&gt; &lt; tag1&gt; c&lt; / tag1&gt; &lt; tag2&gt; bash&lt; / tag2&gt; &lt; tag3&gt; unix&lt; / tag3&gt; &lt; / topusers&gt; &lt; topusers&gt; &lt; user&gt; paxdiablo&lt; / user&gt; &lt; link&gt; http://www.stackoverflow.com//users/14860/paxdiablo< / link&gt; &lt; location&gt;&lt; / location&gt; &lt; year_rep&gt; 3,636&lt; / year_rep&gt; &lt; total_rep&gt; 507,043&lt; / total_rep&gt; &lt; tag1&gt; c&lt; / tag1&gt; &lt; tag2&gt; c ++&lt; / tag2&gt; &lt; tag3&gt; bash&lt; / tag3&gt; &lt; / topusers&gt; &lt; topusers&gt; &lt; user&gt; Pranav C Balan&lt; / user&gt; &lt; link&gt; http://www.stackoverflow.com//users/3037257/pranav-c-balan< / link&gt; &lt; location&gt; Ramanthali、Kannur、Kerala、India&lt; / location&gt; &lt; year_rep&gt; 3,604&lt; / year_rep&gt; &lt; total_rep&gt; 64,476&lt; / total_rep&gt; &lt; tag1&gt; javascript&lt; / tag1&gt; &lt; tag2&gt; jquery&lt; / tag2&gt; &lt; tag3&gt; html&lt; / tag3&gt; &lt; / topusers&gt; &lt; topusers&gt; &lt; user&gt; Suragch&lt; / user&gt; &lt; link&gt; http://www.stackoverflow.com//users/3681880/suragch< / link&gt; &lt; location&gt;中国、フフホト&lt; / location&gt; &lt; year_rep&gt; 3,580&lt; / year_rep&gt; &lt; total_rep&gt; 71,032&lt; / total_rep&gt; &lt; tag1&gt; swift&lt; / tag1&gt; &lt; tag2&gt; ios&lt; / tag2&gt; &lt; tag3&gt; android&lt; / tag3&gt; &lt; / topusers&gt; &lt; / stackoverflow&gt;  

Pythonメソッド

  import xml.etree.ElementTree as et import pandas as pd from io import StringIO from lxml import etree as lxet def read_xml_iterfind():tree = et.parse( "Input.xml")data = [] inner = {} for el in tree.iterfind( "./ *"):for i in el.iterfind( "* "):inner [i.tag] = i.text data.append(inner)inner = {} df = pd.DataFrame(data)def read_xml_iterparse():data = [] inner = {} i = 1 for(ev 、el)in et.iterparse(path):if i&lt; = 2:first_tag = el.tag if el.tag == first_tag and len(inner)!= 0:data.append(inner)inner = {} if el.textはNoneではなく、len(el.text.strip())&gt; 0:inner [el.tag] = el.text i + = 1 df = pd.DataFrame(data)def read_xml_lxml_xpath():tree = lxet.parse( "Input.xml")data = [] inner = {} for el in tree.xpath( "/ * / *"):for i in el:inner [i.tag] = i.text data.append(inner)inner = {} df = pd.DataFrame(data)def read_xml_lxml_xsl( ):xml = lxet.parse( "Input.xml")xslstr = "" "&lt; xsl:transform xmlns:xsl =" http://www.w3.org/1999/XSL/Transform "version =" 1.0 "&gt;&lt; xsl:output version =" 1.0 "encoding = "UTF-8" indent = "yes" method = "text" /&gt;&lt; xsl:strip-space elements = "*" /&gt;&lt;!-HEADERS-&gt;&lt; xsl:template match = "/ *"&gt;&lt; xsl:for-each select = "* [1] / *"&gt;&lt; xsl:value-of select = "local-name()" /&gt;&lt; xsl:choose&gt; &lt; xsl:when test = "position()!= last()"&gt;&lt; xsl:text&gt;、&lt; / xsl:text&gt;&lt; / xsl:when&gt;&lt; xsl:otherwise&gt;&lt; xsl: text&gt;&amp; #xa;&lt; / xsl:text&gt;&lt; / xsl:otherwise&gt;&lt; / xsl:choose&gt;&lt; / xsl:for-each&gt;&lt; xsl:apply-templates /&gt;&lt; / xsl:template&gt;&lt;!-データ行(COMMA-SEPARATED)-&gt;&lt; xsl:template match = "/ * / *" priority = "2"&gt;&lt; xsl:for-each select = " * "&gt;&lt; xsl:if test =" position()= 1 "&gt;&lt; xsl:text&gt;&amp; quot;&lt; / xsl:text&gt;&lt; / xsl:if&gt;&lt; xsl:value- of select ="。"/&gt;&lt; xsl:choose&gt;&lt; xsl:when test = "position()!= last()"&gt;&lt; xsl:text&gt;&amp; quot;、&amp; quot;&lt; / xsl:text&gt; &lt; / xsl:when&gt; &lt; xsl:otherwise&gt; &lt; xsl:text&gt;&amp; quot;&amp; #xa;&lt; / xsl:text&gt; &lt; / xsl:otherwise&gt; &lt; / xsl:choose&gt; &lt; / xsl:for-each&gt; &lt; / xsl:template&gt; &lt; / xsl:transform&gt; "" "xsl = lxet.fromstring(xslstr)transform = lxet.XSLT(xsl)newdom = transform(xml)df = pd.read_csv(StringIO(str(newdom))) 

タイミング(現在のXMLと子の25倍のXML(つまり、900のStackOverflowユーザーレコード)

 #SHORTER FILE python -mtimeit -s "import readxml_test_runs as test" "test.read_xml_iterfind()" 100ループ、ベスト3:ループあたり3.87ミリ秒python -mtimeit -s "import readxml_test_runs as test" "test.read_xml_iterparse()" 100ループ、ベスト3 :ループあたり5.5ミリ秒python -mtimeit -s "import readxml_test_runs as test" "test.read_xml_lxml_xpath()" 100ループ、ベスト3:ループあたり3.86ミリ秒python -mtimeit -s "import readxml_test_runs as test" "test.read_xml_lxml_xsl( )"100ループ、ベスト3:ループあたり5.68ミリ秒#大きなファイルpython -mtimeit -n" 100 "-s" import readxml_test_runs as test "" test.read_xml_iterfind() "100ループ、ベスト3:ループあたり36ミリ秒python -mtimeit -n "100" -s "import readxml_test_runs as test" "test.read_xml_i terparse() "100ループ、ベスト3:ループあたり78.9ミリ秒python -mtimeit -n" 100 "-s" import readxml_test_runs as test "" test.read_xml_lxml_xpath() "100ループ、ベスト3:ループあたり32.7ミリ秒python -mtimeit -n "100" -s "import readxml_test_runs as test" "test.read_xml_lxml_xsl()" 100ループ、ベスト3:ループあたり51.4ミリ秒