Pandas报DataFrame constructor错误及RangeIndex无month属性问题咨询
问题原因排查
第一个ValueError报错原因
- 第1行代码
resample("M").sum后缺少调用括号():sum是pandas重采样对象的聚合方法,未加括号时赋值给monthly的是函数对象本身,而非计算后的序列结果,传入DataFrame构造函数时不符合参数要求,触发报错。
第二个RangeIndex属性报错原因
- 自行使用eval处理的操作逻辑错误,导致生成的
toHeatMap丢失了原有的时间序列索引,变为pandas默认的整数型RangeIndex,该类索引没有year、month属性,因此触发报错。
解决方法
修正第一行的语法错误即可,无需额外做eval处理,完整正确代码如下:
# sum后加()执行聚合计算,得到计算后的时间序列 monthly = data.BuyHold.diff().resample("M").sum() toHeatMap = pd.DataFrame(monthly) toHeatMap["Year"] = toHeatMap.index.year toHeatMap["Month"] = toHeatMap.index.month Show = toHeatMap.groupby(by = ["Year", "Month"]).sum().unstack() Show.columns = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
如果执行后仍有列名相关的小问题,可以在构造DataFrame时手动指定列名:toHeatMap = pd.DataFrame(monthly, columns=['BuyHold'])
内容的提问来源于stack exchange,提问作者Carlo Fava
相关产品推荐
相关产品推荐

