python - 大型 XML 文件 - 附加到 Pandas DF - 越来越慢

标签 python xml parsing

我正在尝试将 XML 转换为可用的数据格式,因此我选择了 pandas 数据框。下面是一些代码,它遍历我的 XML 树并提取每个数据点所需的数据。问题是大约有 632,000 行。我的代码变得越来越慢,很快就需要 100 秒才能完成 1000 次迭代。我觉得遍历每个数据点的时间应该是相对线性的,但有些东西减慢了速度。

有什么建议吗?

如果需要,我可以提供完整的代码和数据集链接。

谢谢。

import xml.etree.cElementTree as ET

tree = ET.parse(path+xname)
root = tree.getroot()
data = pd.DataFrame(None,columns=["GEO","AGE","SEX","YEAR","VALUE"])
b = time.time()
c = len(root[1])

for i in range(1,range(len(root[1])):
    if i % 1000 == 0:
        a = time.time()
        print (a - b)
        b = time.time()
    data = data.append({"GEO":root[1][i][0][0].attrib["value"], \
                        "AGE":root[1][i][0][1].attrib["value"], \
                        "SEX":root[1][i][0][2].attrib["value"], \
                        "TIME":root[1][i][1][0].text, \
                        "VALUE":root[1][i][1][1].attrib["value"]}, \
                       ignore_index=True)
    root[1][i].clear()

最佳答案

通常,您希望在将整个数据集传递给数据框构造函数之前构建整个数据集。追加速度非常慢,因为它在后端从头开始创建一个全新的数据帧。

import xml.etree.cElementTree as ET
import pandas as pd

tree = ET.parse(path+xname)
root = tree.getroot()

data = []
for i in range(1, range(len(root[1])):
    data.append((root[1][i][0][0].attrib["value"], 
                 root[1][i][0][1].attrib["value"], 
                 root[1][i][0][2].attrib["value"], 
                 root[1][i][1][0].text, 
                 root[1][i][1][1].attrib["value"]))

df = pd.DataFrame(data ,columns=["GEO","AGE","SEX","YEAR","VALUE"])

关于python - 大型 XML 文件 - 附加到 Pandas DF - 越来越慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48217974/

相关文章:

python - 如何修复TypeError : unsupported operand type(s) for -: 'tuple' and 'tuple'

python - 为什么 Python 中变量赋值的行为不同?

Python - 如何将结果从 group by 传递到 Pivot?

java - 当我将 xml 中的数据放入我的 customJTable 时,"prepareRenderer"不起作用

c# - 不指定 XmlRootAttribute 的 XML 反序列化

xml - 将 xml 转换为 JSON 的问题

python - Pandas 将数字转换为字符串 - 意外结果

javascript - 从 xml 读取 javascript 警报值

security - Perl 解析器可以安全地解析任意代码吗?

javascript - 在 HTML5 数据属性中存储和检索 javascript 数组