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

Python3读取CSV绘制时间序列遇KeyError: 'TimeStamp'问题求助

问题排查:读取CSV绘制时间序列图时的KeyError: 'TimeStamp'

问题详情

尝试从CSV文件绘制Temperature和Voltage的时间序列图时,始终抛出KeyError: 'TimeStamp',报错栈如下:

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "Date_Time_Experiment.py", line 10, in 
data['TimeStamp'] = pd.to_datetime(data['TimeStamp'], format='%d/%m/%Y-%H:%M:%S')
File "/home/pi/.local/lib/python3.7/site-packages/pandas/core/frame.py", line 3458, in __getitem__
indexer = self.columns.get_loc(key)
File "/home/pi/.local/lib/python3.7/site-packages/pandas/core/indexes/base.py", line 3363, in get_loc
raise KeyError(key) from err
KeyError: 'TimeStamp'

使用的代码如下:

import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
from datetime import datetime


plt.style.use('fivethirtyeight')

def animate(i):
    data = pd.read_csv('Logging.csv', skiprows=1)
    data['TimeStamp'] = pd.to_datetime(data['TimeStamp'], format='%d/%m/%Y-%H:%M:%S')
    
    x=data['TimeStamp'] 
    y1=data['Temperature']
    y2=['Voltage']
    plt.cla()
    plt.plot(x,y1,label='Temperature')
    plt.plot(x,y2,label='Voltage')
    
    plt.legend(loc='upper left')
    plt.tight_layout()
    
ani=FuncAnimation(plt.gcf(),animate, interval=61000)

plt.tight_layout()
plt.show()

CSV文件结构:

TimeStampTemperatureVoltage
07/03/2023-15:33:4520.59510.04591440
07/03/2023-16:15:3220.63010.04591070

问题根源

  1. 核心错误:skiprows=1参数导致表头丢失
    你的CSV第一行是表头(TimeStamp、Temperature、Voltage),但pd.read_csv('Logging.csv', skiprows=1)会跳过第一行,导致pandas把第一行数据当成表头,自然找不到名为'TimeStamp'的列。
  2. 次要错误:Voltage列取值错误
    代码中y2=['Voltage']是一个字符串列表,而非从data中读取的数值列,会导致后续绘图失败。

修复后的代码

import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation

plt.style.use('fivethirtyeight')

def animate(i):
    # 去掉skiprows=1保留表头,同时在读取时直接解析时间列提升效率
    data = pd.read_csv(
        'Logging.csv',
        parse_dates=['TimeStamp'],
        date_format='%d/%m/%Y-%H:%M:%S'
    )
    
    x = data['TimeStamp'] 
    y1 = data['Temperature']
    y2 = data['Voltage']  # 修正为读取data中的Voltage列
    
    plt.cla()
    plt.plot(x, y1, label='Temperature')
    plt.plot(x, y2, label='Voltage')
    
    plt.legend(loc='upper left')
    plt.xticks(rotation=45)  # 新增:旋转x轴标签避免重叠
    plt.tight_layout()

ani = FuncAnimation(plt.gcf(), animate, interval=61000)
plt.tight_layout()
plt.show()

额外优化建议

  • 如果CSV文件在持续追加新数据,可以只读取最新的N行减少资源占用:data = pd.read_csv('Logging.csv', parse_dates=['TimeStamp'], date_format='%d/%m/%Y-%H:%M:%S').tail(50)
  • 可以添加x轴标签和标题,提升图表可读性:plt.xlabel('Time')、plt.title('Temperature & Voltage Time Series')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 11:57:54