【问题标题】:Unpacking list of dictionary elements into pandas data frame将字典元素列表解包到熊猫数据框中
【发布时间】:2015-08-23 13:48:11
【问题描述】:

我正在尝试解析 xml 格式的 iTunes 播放列表。

这是我试图解析并将最终结果放入 pandas 数据框的示例 xml。

    <dict>
                <key>Track ID</key><integer>3636</integer>
                <key>Size</key><integer>6661871</integer>
                <key>Total Time</key><integer>211774</integer>
                <key>Track Number</key><integer>4</integer>
                <key>Track Count</key><integer>14</integer>
                <key>Year</key><integer>2007</integer>
                <key>Date Modified</key><date>2008-06-27T15:14:16Z</date>
                <key>Date Added</key><date>2009-07-06T12:03:10Z</date>
                <key>Bit Rate</key><integer>251</integer>
                <key>Sample Rate</key><integer>44100</integer>
                <key>Play Count</key><integer>5</integer>
                <key>Play Date</key><integer>3373708724</integer>
                <key>Play Date UTC</key><date>2010-11-27T13:18:44Z</date>
                <key>Skip Count</key><integer>3</integer>
                <key>Skip Date</key><date>2015-06-26T14:20:01Z</date>
                <key>Persistent ID</key><string>E966DF081B4B40E1</string>
                <key>Track Type</key><string>File</string>
                <key>File Folder Count</key><integer>5</integer>
                <key>Library Folder Count</key><integer>1</integer>
                <key>Artist</key><string>Fall Out Boy</string>
                <key>Album</key><string>Infinity On High</string>
                <key>Genre</key><string>Rock</string>
                <key>Kind</key><string>MPEG audio file</string>
</dict>

以下是我解析xml的python代码

from lxml import objectify
import pandas as pd
path = 'C:/Users/username/desktop/itunes.xml'
xml = objectify.parse(open(path))
root = xml.getroot()
tracks = root.getchildren()[0].getchildren()[15]
oddelements=tracks.getchildren()[1::2]

最终结果“oddelements”对象是元素字典列表

此列表中的每个元素字典都包含我在上面粘贴的示例 xml 中的“dict”标记中包含的信息。

我如何解析这个元素字典列表并将它们解压缩到 pandas 数据框中以进行进一步分析?

非常感谢您的帮助

【问题讨论】:

    标签: python xml pandas


    【解决方案1】:

    类似的东西应该可以工作:

    import xml.etree.ElementTree as ET
    import pandas as pd
    root=ET.fromstring('<dict><key>Track ID</key><integer>3636</integer></dict>')
    #parsing into a dictionary
    d={}
    k=''
    for t in root:
      if t.tag=='key':
        k=t.text
        continue
      d[k]=t.text
    #transforming to a DataFrame
    df=pd.DataFrame(d.items(),columns=['key','value'])
    print (df)
    

    【讨论】:

    • 谢谢尤里。但是,如果我要通过 lxml 包按照我的方式进行操作,您是否对如何从字典元素列表中解压缩键值有任何想法,例如,如果我的对象是包含像 [ dict 1,dict 2 这样的字典的列表。 ... dict n]?
    猜你喜欢
    • 2020-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-23
    • 2022-11-16
    • 2018-07-11
    • 2021-06-01
    相关资源
    最近更新 更多