我有一个input.xml示例:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<bathrooms>
<n35237 type="number">1.0</n35237>
<n32238 type="number">3.0</n32238>
<n44699 type="number">nan</n44699>
</bathrooms>
<price>
<n35237 type="number">7020000.0</n35237>
<n32238 type="number">10000000.0</n32238>
<n44699 type="number">4128000.0</n44699>
</price>
<property_id>
<n35237 type="number">35237.0</n35237>
<n32238 type="number">32238.0</n32238>
<n44699 type="number">44699.0</n44699>
</property_id>
</root>
我想把它作为一个数据框架来分析。我使用的代码如下:
import pandas as pd
import xml.etree.ElementTree as ET
tree = ET.parse('input.xml')
root = tree.getroot()
def f(elem, result):
result[elem.tag] = elem.text
cs = list(elem)
for c in cs:
result = f(c, result)
return result
d = f(root, {})
df=pd.DataFrame(d.items())
print(df)
问题是,数据框架没有xml文件那么重要。它只显示xml的最后一个节点,因为节点的名称重复它们自己。如何查看所有xml节点及其对应的值,而不需要指定节点的名称?(这样就可以对任何自定义xml执行此操作)
请尝试以下步骤
默认情况下,pandas read xml将根标记视为pandas数据帧的“行”。如果这不是真的,则传递参数
root_is_rows=False
*有时候,XML结构会让pandas以一种我们认为是相反的方式对待行和列。对于这些情况,
read_xml()
可能会失败。在这种情况下,尝试使用transpose=True作为参数。只有在传递root_is_rows=False
时,此参数才会影响读取资料来源:https://pypi.org/project/pandas-read-xml/#:~:text=Read%20XML%20as%20pandas%20dataframe,want%20to%20extract%20the%20data.&text=By%20default%2C%20pandas%2Dread%2D,pass%20the%20argument%20root_is_rows%3DFalse%20
由于您想要的行是root的孙子,请尝试将嵌套字典理解传递到
DataFrame
构造函数中。下面使用float
强制转换节点文本。如果内容不是全部小数点,则删除相关问题 更多 >
编程相关推荐