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

读取XML并绘制多时间序列:XML解析与Pandas数据处理求助

解决XML解析及时间序列数据存入Pandas DataFrame的问题

Hey there! Let's work through your XML parsing and pandas DataFrame issue together. Since you mentioned your current code snippet isn't producing output, let's start with a robust approach to extract daily time series data and get it into pandas for plotting.

第一步:XML解析的通用方案(以常见时间序列XML结构为例)

假设你的XML结构类似这样(如果实际结构不同,你可以调整节点选择器):

<time_series_data>
  <day date="2024-05-01">
    <entry time="08:00" value="23.5"/>
    <entry time="09:00" value="24.2"/>
    <!-- 更多时段数据 -->
  </day>
  <day date="2024-05-02">
    <entry time="08:00" value="22.8"/>
    <entry time="09:00" value="23.6"/>
    <!-- 更多时段数据 -->
  </day>
</time_series_data>

我们可以用Python内置的xml.etree.ElementTree来解析,代码如下:

import xml.etree.ElementTree as ET
import pandas as pd

# 解析XML文件
tree = ET.parse('your_data.xml')
root = tree.getroot()

# 初始化列表存储提取的数据
data_list = []

# 遍历每个日期节点
for day_node in root.findall('day'):
    date = day_node.attrib.get('date')
    # 遍历当日的每个时间点数据
    for entry_node in day_node.findall('entry'):
        time = entry_node.attrib.get('time')
        value = float(entry_node.attrib.get('value'))
        # 组合成完整时间戳,方便后续时间序列处理
        timestamp = f"{date} {time}"
        data_list.append({
            'timestamp': timestamp,
            'date': date,
            'time': time,
            'value': value
        })

# 转换为Pandas DataFrame
df = pd.DataFrame(data_list)
# 将timestamp转为datetime类型,便于后续时间相关操作
df['timestamp'] = pd.to_datetime(df['timestamp'])

# 打印前几行验证数据
print(df.head())

第二步:排查解析无输出的常见原因

如果运行上述代码还是没有输出,你可以检查这几点:

  • 确认XML文件路径正确:要么放在当前工作目录,要么使用绝对路径
  • 检查XML节点标签名是否完全匹配:XML是大小写敏感的,比如Day和day会被识别为不同标签
  • 查看XML文件是否有语法错误:比如未闭合的标签、格式混乱
  • 如果XML带命名空间,需要在查找节点时指定命名空间,示例:
    namespace = {'ns': 'http://your-namespace-url.com'}
    root.findall('ns:day', namespaces=namespace)
    

第三步:绘制多日趋势图

数据存入DataFrame后,你可以用matplotlib快速绘制多日变化趋势图:

import matplotlib.pyplot as plt

# 按日期分组绘制每条趋势线
for date, group in df.groupby('date'):
    plt.plot(group['time'], group['value'], label=date)

plt.xlabel('Time of Day')
plt.ylabel('Value')
plt.title('Daily Time Series Trend')
plt.legend()
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

如果你的XML结构和我假设的不一样,把具体的XML片段贴出来,我们可以再调整解析逻辑!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:18:46