【问题标题】:How to convert multiple tuples into a dataframe in pandas如何将多个元组转换为熊猫中的数据框
【发布时间】:2017-08-13 13:33:09
【问题描述】:

我编写了一个 for 循环,它从 XML 文件中返回多个像这样的元组。它看起来像这样:

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

XML 文件是这样的,a、b 和 c 在同一个子标签下。而且,as、bs 和 cs 中的每一个都是相同的数据类型。我尝试将每个添加到一个空列表 z= [] 中,z.append(yyy) 在同一个嵌套 for 循环中,我一直得到这样的东西:

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

我明白为什么会这样,因为可能每个列表都绑定到 XML 树中的同一个子标记。然而,我想要的只是有一个这样的元组列表:

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

使我能够将其转换为 Pandas DataFrame。最好的方法是什么?有没有办法直接从元组中做到这一点而无需制作列表?谢谢你。 因此,我的代码片段是:

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 元素下拥有多个。

XML 看起来像这样:

<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>

【问题讨论】:

    标签: python xml list pandas data-science


    【解决方案1】:

    但是,我想要的只是有一个这样的元组列表:

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

    为了得到一个列表中的所有元组,必须在 alls 循环之外初始化空列表 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)
    

    从那里您应该能够轻松地将数据转换为 pandas 数据框。祝你好运!

    【讨论】:

    • 嗯,我没有想到我没有那个,因为通常 for 循环像我们在 C++ 和 Java 中一样被初始化。希望我能很快掌握 Python 的速度。感谢@MathiasL 为我指明了正确的方向。
    猜你喜欢
    • 1970-01-01
    • 2014-08-02
    • 2019-04-23
    • 1970-01-01
    • 2020-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-19
    相关资源
    最近更新 更多