我正在尝试将 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/