如何使用DataFrame计算指定年份对应数据的标准差
错误原因
你调用iloc报错是因为iloc是基于整数位置的索引工具,仅支持传入整数、整数列表/切片等位置类参数,不能直接传入年份作为筛选条件,参数类型不匹配就会触发类型错误。
正确实现步骤
1. 前置处理(推荐):将Date列转为datetime类型
避免字符串匹配可能出现的格式错误,后续时间类操作也更灵活:
import pandas as pd # 转换Date列格式 df['Date'] = pd.to_datetime(df['Date'])
2. 筛选指定年份数据计算标准差
以2017年为例:
# 提取2017年的Price列计算标准差 sd_2017 = df[df['Date'].dt.year == 2017]['Price'].std()
如果你的Date列已经是字符串格式且严格遵循YYYY-MM-DD的命名规则,也可以不用转格式直接用字符串匹配:
sd_2017 = df[df['Date'].str.startswith('2017')]['Price'].std()
如果执行后仍有类型错误,可以先执行print(df['Price'].dtype)检查Price列是否为数值类型,若为object类型需要先转成数值格式再计算标准差。
扩展用法
如果需要批量计算所有年份的Price标准差,可以直接用groupby实现:
# 输出结果为索引是年份、值为对应年份标准差的Series yearly_sd = df.groupby(df['Date'].dt.year)['Price'].std()
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

