You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将XML数据存入空列表后创建DataFrame报错,求解决方法

解决XML提取数据创建DataFrame时的空值问题

你的问题核心是部分标签为空时,XPath的text()方法会跳过该标签,导致提取的各列表长度不一致,而Pandas创建DataFrame要求所有列的长度必须相同,因此报错。以下是两种可行的解决方法:

方法一:按行遍历提取,确保空值填充

遍历每一行节点,逐个提取字段,遇到空标签时手动填充None或空字符串,保证所有列表长度一致:

import pandas as pd
import requests
from lxml import objectify

URL = 'https://data.virginia.gov/api/views/xvir-sctz/rows.xml?accessType=DOWNLOAD'
response = requests.get(URL).content
root = objectify.fromstring(response)

# 获取所有数据行节点
rows = root.xpath('//response/row/row')

# 初始化存储列表
month = []
households_served = []
individuals_served = []
pounds_of_food_distributed = []

for row in rows:
    # 提取单个字段,存在则取第一个值,否则填None
    month_val = row.xpath('./month/text()')
    month.append(month_val[0] if month_val else None)
    
    house_val = row.xpath('./households_served/text()')
    households_served.append(house_val[0] if house_val else None)
    
    people_val = row.xpath('./individuals_served/text()')
    individuals_served.append(people_val[0] if people_val else None)
    
    pounds_val = row.xpath('./pounds_of_food_distributed/text()')
    pounds_of_food_distributed.append(pounds_val[0] if pounds_val else None)

# 创建DataFrame
table = pd.DataFrame({
    'Month': month,
    'House': households_served,
    'People': individuals_served,
    'Pounds': pounds_of_food_distributed
})

方法二:用Pandas直接读取XML(推荐)

Pandas内置的read_xml方法可以直接解析XML,自动处理空值,无需手动维护列表,代码更简洁:

import pandas as pd

URL = 'https://data.virginia.gov/api/views/xvir-sctz/rows.xml?accessType=DOWNLOAD'
# 指定XPath定位到数据行
table = pd.read_xml(URL, xpath='//response/row/row')
# 重命名列名(可选)
table.rename(columns={
    'month': 'Month',
    'households_served': 'House',
    'individuals_served': 'People',
    'pounds_of_food_distributed': 'Pounds'
}, inplace=True)

内容的提问来源于stack exchange,提问作者natguy8

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 13:10:23