将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
相关产品推荐
相关产品推荐

