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

Pandas中基于时间索引计算气候数据均值极值及解决索引访问问题

解决Pandas时间索引KeyError问题及时间维度统计

错误原因

你把Date-time设为索引后,它就不再是DataFrame的普通列了,所以用df['Date-time']会报KeyError——得从索引对象里获取时间属性,而不是列名。

完整修正步骤(附代码)

1. 正确读取并处理无表头CSV

不用自定义函数解析日期,Pandas自带的pd.to_datetime足够处理绝大多数格式,直接一步到位转日期并设为索引:

import pandas as pd

# 读取无表头CSV,自定义列名(根据你的实际数据调整列数和名称)
df = pd.read_csv('climate_data.csv', header=None, names=['Date-time', 'Temperature', 'Humidity', 'Pressure'])

# 转datetime格式+设为索引(两种写法选一种)
# 写法1:分步处理
df['Date-time'] = pd.to_datetime(df['Date-time'])  # 自动识别格式,特殊格式可加format参数,比如format='%d/%m/%Y %H:%M'
df = df.set_index('Date-time')

# 写法2:读取时直接完成(更简洁)
# df = pd.read_csv('climate_data.csv', header=None, names=['Date-time', 'Temperature', 'Humidity', 'Pressure'],
#                  parse_dates=['Date-time'], index_col='Date-time')

2. 正确访问时间索引的属性

现在索引是DatetimeIndex类型,直接通过df.index获取年/月/周/日:

# 获取年份
print(df.index.year)
# 获取月份
print(df.index.month)
# 获取ISO标准周数
print(df.index.isocalendar().week)
# 获取不含时分的日期
print(df.index.date)

3. 按时间维度做统计计算

有两种常用方法,选你顺手的:

方法1:用resample(时间序列专属,更直观)

resample专门针对时间索引分组,支持多种时间频率:

# 年度统计:指定列的均值、最大值、最小值
yearly_stats = df.resample('Y').agg({
    'Temperature': ['mean', 'max', 'min'],
    'Humidity': ['mean', 'max', 'min'],
    'Pressure': ['mean', 'max', 'min']
})

# 月度统计:对所有数值列统计
monthly_stats = df.resample('M').agg(['mean', 'max', 'min'])

# 周度统计
weekly_stats = df.resample('W').agg(['mean', 'max', 'min'])

# 日度统计
daily_stats = df.resample('D').agg(['mean', 'max', 'min'])
方法2:用groupby结合索引属性

适合需要更灵活分组规则的场景:

# 按年份分组统计所有数值列
yearly_group = df.groupby(df.index.year).agg(['mean', 'max', 'min'])

# 按「年份+月份」分组(比如2023年1月、2024年1月分开统计)
year_month_group = df.groupby([df.index.year, df.index.month]).agg(['mean', 'max', 'min'])

常见坑提醒

  • 如果你的日期格式比较特殊(比如dd/mm/yyyy HH:MM),一定要在pd.to_datetime里加format参数,避免解析错误。
  • 不要把索引再转回列(除非必要),时间索引是Pandas处理时间序列的核心优势,保留它能简化后续所有统计操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 10:46:14