XMLファイルをPandasデータフレームに変換する方法

sbac

次のXMLファイルを変換したい:

<data>
  <level_1 name="employment">
    <level_2 name="sub-employment">
      <indicator>ind1</indicator>
      <indicator>ind2</indicator>
    </level_2>
    <level_2 name="sub-employment2">
      <indicator>ind3</indicator>
    </level_2>
  </level_1>
  <level_1 name="health">
    <level_2 name="sub-health">
      <level_3 name="sub-sub-health">
        <indicator>ind4</indicator>
      </level_3>
    </level_2>
  </level_1>
</data>

Pandasデータフレームに変換すると、次のような結果になります。

  level_1   level_2         level_3        indicator

0  employment  sub-employment   None             ind1
1  employment  sub-employment   None             ind2    
2  employment  sub-employment2  None             ind3 
3  health      sub-health       sub-sub-health   ind4

xml.etree.cElementTreeをetとしてインポートし、pandasをpdとしてインポートした後、次のコードを使用しました。

def getvalueofnode(node):
    """ return node text or None """
    return node.text if node is not None else None          
def main():
    """ main """
    parsed_xml = et.parse("tree.xml")
    dfcols = ['level_1', 'level_2', 'level_3', 'indicator']
    df_xml = pd.DataFrame(columns=dfcols)

    for node in parsed_xml.getroot():
        name = node.attrib.get('name')
        level_2 = node.find('level_2')
        level_3 = node.find('level_3')
        indicator = node.find('indicator')

        df_xml = df_xml.append(
            pd.Series([name, getvalueofnode(level_2), getvalueofnode(level_3),
                       getvalueofnode(indicator)], index=dfcols),
            ignore_index=True)     
    print(df_xml)     
main()

しかし、私は間違った結果を得ています:

      level_1   level_2 level_3 indicator
0  employment  \n          None      None
1      health  \n          None      None

私はここで何が間違っているのですか?

Valdi_Bo

次の関数を定義し、ノードから上に向かって祖先のディクショナリを作成します

def parNames(node, root):
    names = {}
    while True:
        node = parentMap[node]
        if node is root:
            return names
        names[node.tag] = node.attrib['name']

後で必要になります。間もなく作成されるparentMap辞書を使用します。

入力ファイルを読み取ります。

tree = et.parse('tree.xml')
root = tree.getroot()

実際の処理は、親マップ(辞書)の作成から開始する必要があります。辞書は、ノードごとに親を返します。

parentMap = {}
for parent in root.iter():
    for child in parent:
        parentMap[child] = parent

DataFrameのソースデータを作成するには、次のコマンドを実行します。

rows = []
for it in root.iter('indicator'):
    row = parNames(it, root)
    row[it.tag] = it.text
    rows.append(row)

このループは、辞書のリスト(各行のデータ)を作成します。各行(辞書)には次のものが含まれます。

  • イテレータキーの-それぞれのノードのテキスト、
  • 「親」キー(level _...)の下にあるすべての親の名前属性(parNames関数によって返されます)。

次のステップは、DataFrameを作成することです。

df2 = pd.DataFrame(rows).fillna('').sort_index(axis=1)

そして、実行する唯一のステップは、インジケーター列を最後の位置に移動することです

df2 = df2.reindex(df2.columns.drop('indicator')
    .append(pd.Index(['indicator'])),axis=1)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

この不均一なXMLファイルをPandasデータフレームに変換する方法

分類Dev

JSONファイルをPandasデータフレームに変換する

分類Dev

複雑なXMLファイルをPandasデータフレーム/ CSVに変換する-Python

分類Dev

XMLファイルをPythonでデータフレームまたはCSV出力に変換する方法

分類Dev

XMLファイルを素敵なパンダデータフレームに変換する方法は?

分類Dev

PythonデータフレームをMatlabファイルに変換する

分類Dev

ラスターASCIIファイルをRのlatlongsのデータフレームに変換する方法は?

分類Dev

属性を持つ複数のネストされたXMLファイルからSparkデータフレームデータに変換する方法

分類Dev

jsonファイルをデータフレームに変換する効率的な方法は何ですか?

分類Dev

npzファイルをパンダデータフレームに変換する方法はありますか?

分類Dev

複数の区切り文字を含むファイルをデータフレームに変換する方法

分類Dev

Python-JSONファイルをデータフレームに変換する方法

分類Dev

Jsonファイルを読み取ってデータフレームに変換する方法

分類Dev

.txtファイルの文字列のリストをデータフレームに変換する方法

分類Dev

辞書形式のtxtファイルをPythonのデータフレームに変換する方法は?

分類Dev

全文をファイルから単一列のデータフレームに変換する方法

分類Dev

Tableau .hyperファイルをパンダデータフレームに変換する方法は?

分類Dev

Tableau .hyperファイルをパンダデータフレームに変換する方法は?

分類Dev

pandasライブラリを使用してPythonで奇妙な区切り文字を含むCSVファイルをデータフレームに変換する方法

分類Dev

Rでxmlデータをデータフレームに変換する方法

分類Dev

Gnucash:巨大なXMLデータファイルをsqliteに変換する方法は?

分類Dev

XMLファイルから要素を抽出してパンダデータフレームに変換する方法はありますか?

分類Dev

Tweepyデータをテキストファイルからデータフレームに変換する

分類Dev

テキストファイルのデータをデータフレームに変換する

分類Dev

動的XMLファイルをパンダデータフレームに変換します

分類Dev

txtファイルをデータフレームに変換します

分類Dev

Rcsvファイルをデータフレームに変換します

分類Dev

データをExcelファイルに変換する方法

分類Dev

テキストファイルpythonを解析し、pandasデータフレームに変換します

Related 関連記事

  1. 1

    この不均一なXMLファイルをPandasデータフレームに変換する方法

  2. 2

    JSONファイルをPandasデータフレームに変換する

  3. 3

    複雑なXMLファイルをPandasデータフレーム/ CSVに変換する-Python

  4. 4

    XMLファイルをPythonでデータフレームまたはCSV出力に変換する方法

  5. 5

    XMLファイルを素敵なパンダデータフレームに変換する方法は?

  6. 6

    PythonデータフレームをMatlabファイルに変換する

  7. 7

    ラスターASCIIファイルをRのlatlongsのデータフレームに変換する方法は?

  8. 8

    属性を持つ複数のネストされたXMLファイルからSparkデータフレームデータに変換する方法

  9. 9

    jsonファイルをデータフレームに変換する効率的な方法は何ですか?

  10. 10

    npzファイルをパンダデータフレームに変換する方法はありますか?

  11. 11

    複数の区切り文字を含むファイルをデータフレームに変換する方法

  12. 12

    Python-JSONファイルをデータフレームに変換する方法

  13. 13

    Jsonファイルを読み取ってデータフレームに変換する方法

  14. 14

    .txtファイルの文字列のリストをデータフレームに変換する方法

  15. 15

    辞書形式のtxtファイルをPythonのデータフレームに変換する方法は?

  16. 16

    全文をファイルから単一列のデータフレームに変換する方法

  17. 17

    Tableau .hyperファイルをパンダデータフレームに変換する方法は?

  18. 18

    Tableau .hyperファイルをパンダデータフレームに変換する方法は?

  19. 19

    pandasライブラリを使用してPythonで奇妙な区切り文字を含むCSVファイルをデータフレームに変換する方法

  20. 20

    Rでxmlデータをデータフレームに変換する方法

  21. 21

    Gnucash:巨大なXMLデータファイルをsqliteに変換する方法は?

  22. 22

    XMLファイルから要素を抽出してパンダデータフレームに変換する方法はありますか?

  23. 23

    Tweepyデータをテキストファイルからデータフレームに変換する

  24. 24

    テキストファイルのデータをデータフレームに変換する

  25. 25

    動的XMLファイルをパンダデータフレームに変換します

  26. 26

    txtファイルをデータフレームに変換します

  27. 27

    Rcsvファイルをデータフレームに変換します

  28. 28

    データをExcelファイルに変換する方法

  29. 29

    テキストファイルpythonを解析し、pandasデータフレームに変換します

ホットタグ

アーカイブ