Python解析XML:如何提取对应日期与数值并生成Pandas DataFrame
解决XML解析提取对应日期与数值的问题
核心思路
每个<generic:Obs>节点是一组日期和数值的独立容器,先定位所有Obs节点,再在每个节点内分别提取对应的ObsDimension和ObsValue的value属性,就能保证日期与数值一一对应,不会错位。
完整代码示例
from bs4 import BeautifulSoup import pandas as pd # 解析XML内容 soup = BeautifulSoup(response.text, 'xml') # 定位所有Obs节点(标签前缀需匹配实际XML结构,若没有generic:则直接写"Obs") obs_nodes = soup.find_all("generic:Obs") data = [] for obs in obs_nodes: # 提取当前Obs节点下的日期和数值 date = obs.find("generic:ObsDimension")["value"] value = obs.find("generic:ObsValue")["value"] data.append({"Date": date, "Value": value}) # 生成目标DataFrame df = pd.DataFrame(data, columns=['Date', 'Value'])
补充说明
- 如果XML里的标签没有
generic:前缀,直接把代码中的前缀去掉即可,比如用find_all("Obs")、find("ObsDimension")。 - 若存在部分节点缺失
ObsDimension或ObsValue的情况,可添加异常处理跳过无效条目:
data = [] for obs in obs_nodes: try: date = obs.find("generic:ObsDimension")["value"] value = obs.find("generic:ObsValue")["value"] data.append({"Date": date, "Value": value}) except (AttributeError, KeyError): # 跳过结构不完整的节点 continue
内容的提问来源于stack exchange,提问作者Michael Mueller
相关产品推荐
相关产品推荐

