如何在将API返回XML写入DataFrame时消除换行并规整行数据
解决XML转DataFrame时每行单字段的问题
你现在的问题出在遍历XML元素的方式上——每次循环单个字段就创建一个DataFrame,最后concat自然会把每个字段拆成单独的行,还会出现空行。咱们换个思路,先把每个TrackingEvent的所有字段整理成一个完整的字典,再把这些字典收集起来一次性转成DataFrame,就能得到每个事件对应一行的结果了。
修正后的代码
import requests import pandas as pd import xml.etree.ElementTree as ET # 假设你的url和headers已经提前定义好 response_status = requests.get(url, headers=headers) tree = ET.fromstring(response_status.content) consolidated_list = [] # 遍历每个TrackingEvent节点 for event in tree.iter('TrackingEvent'): event_data = {} # 遍历当前事件下的所有子元素 for elem in event: # 只处理有实际内容的元素,跳过空值 if elem.text is not None: event_data[elem.tag] = elem.text # 把整理好的单个事件数据加入列表 consolidated_list.append(event_data) # 直接用字典列表生成符合要求的DataFrame consolidated_df = pd.DataFrame(consolidated_list) print(consolidated_df)
代码说明
- 先遍历每个
TrackingEvent节点,为每个事件单独创建一个空字典event_data - 再遍历当前事件下的子字段(比如
DateTimeStamp、Event),把非空的键值对存入字典,确保每个字典对应一个完整的事件信息 - 最后用
pd.DataFrame()直接把字典列表转成DataFrame,每个字典就对应DataFrame的一行
运行这段代码后,你就能得到期望的输出:
DateTimeStamp Event ExtraInfo 0 202010 Delivered 02921 1 202010 Delivery today 31916
内容的提问来源于stack exchange,提问作者user14504471
相关产品推荐
相关产品推荐

