使用Pandas读取CSV计算月均值时遇KeyError: 'Date'的解决问询
解决Pandas读取CSV时的KeyError: 'Date'问题
这个问题我之前也碰到过,根源在于你用的pd.DataFrame.from_csv方法已经被Pandas弃用,而且它的默认行为会把CSV的第一列当成DataFrame的索引,而不是普通的数据列。这就导致你后续尝试访问data['Date']时,找不到这个列名,从而抛出KeyError: 'Date'。
下面是具体的解决方案和优化后的代码:
核心修复点
- 替换为官方推荐的
pd.read_csv方法,它的默认行为会正确识别表头,不会把第一列设为索引。 - 显式解析日期列,确保日期格式被正确识别,避免自动解析出错。
- 优化分组求均值的逻辑,让代码更简洁规范。
修改后的完整代码
import pandas as pd import os os.chdir("in/base/dir") # 使用pd.read_csv替代已弃用的from_csv,默认将第一行作为表头 data = pd.read_csv("data.csv") # 显式解析Date列,指定格式匹配你的YEAR-MONTH-DAY(两位年份用%y,四位年份请用%Y) data['Date'] = pd.to_datetime(data['Date'], format='%y-%m-%d') # 直接通过dt.month提取月份,比转DatetimeIndex更简洁 data['Month'] = data['Date'].dt.month # 仅对Data列求月均值,并用reset_index将Month转为普通列 mean_data = data.groupby('Month')['Data'].mean().reset_index() # 使用Pandas的to_csv方法保存,格式更规范,避免print带来的格式问题 mean_data.to_csv("data_monthly.csv", index=False)
关键细节解释
- 为什么用
read_csv?from_csv是Pandas的旧版方法,现在官方已经不再维护,而read_csv参数更灵活,默认会把CSV的第一行作为表头,所有列都保留为数据列,完美解决你遇到的表头未被识别的问题。 - 显式指定日期格式
用pd.to_datetime加上format='%y-%m-%d'可以让日期解析更快、更准确,避免Pandas自动猜测格式时出现错误(尤其是当你的数据里有多种日期格式时)。如果你的年份是四位(比如2024-01-01),把%y改成%Y即可。 - 优化分组逻辑
groupby('Month')['Data'].mean()只针对Data列计算均值,避免对其他列做不必要的计算;reset_index()会把Month从分组后的索引变回普通列,这样保存的CSV会更符合常规格式。 - 用
to_csv保存文件
相比print到文件,to_csv是Pandas专门为CSV设计的保存方法,能正确处理分隔符、表头和索引,输出的文件格式更标准。
内容的提问来源于stack exchange,提问作者steve
相关产品推荐
相关产品推荐

