如何用Pandas解析CSV日期字段并绘制温度变化图?
解决CSV日期时间字段合并与绘图问题
问题分析与修复要点
- 你的
parser函数存在语法错误,缺少闭合括号 - 使用
parse_dates字典参数时,Pandas会将指定列拼接为单个字符串传递给date_parser,而非分开的参数 - 设置
index_col=0后,datetime会成为DataFrame索引,无法通过df['datetime']访问
修正后的完整代码
方法一:修复自定义解析器
import pandas as pd import matplotlib.pyplot as plt def parser(date_str): # Pandas传递的是拼接后的字符串,格式为"year month day hour min sec" year, month, day, hour, minute, second = date_str.split() return pd.to_datetime(f"{day}.{month}.{year} {hour}:{minute}:{second}") df = pd.read_csv( 'temp_data.csv', sep=';', parse_dates={'datetime': ['year', 'month', 'day', 'hour', 'min', 'sec']}, date_parser=parser, index_col=0 ) plt.plot(df.index, df['temperature']) plt.xlabel('时间') plt.ylabel('温度') plt.title('温度随时间变化') plt.show()
方法二:更简洁的无自定义函数实现
利用Pandas原生能力直接合并日期时间列:
import pandas as pd import matplotlib.pyplot as plt df = pd.read_csv('temp_data.csv', sep=';') # 自动识别年/月/日/时/分/秒列并合并为datetime df['datetime'] = pd.to_datetime(df[['year', 'month', 'day', 'hour', 'min', 'sec']]) df.set_index('datetime', inplace=True) plt.plot(df.index, df['temperature']) plt.xlabel('时间') plt.ylabel('温度') plt.title('温度随时间变化') plt.show()
说明
- 方法二无需自定义解析器,Pandas可直接识别包含年、月、日等字段的DataFrame并转换为时间格式
- 两种方法均能正确合并日期时间字段,并生成温度随时间变化的折线图
内容的提问来源于stack exchange,提问作者fred
相关产品推荐
相关产品推荐

