Pandas使用iloc索引DatetimeIndex报TypeError及累计求和问题
报错原因
- 你代码中
d.iloc[1:'stuff']里的stuff被加了单引号,变成了字符串类型的常量,而iloc是基于整数位置的索引器,只能接收整数/整数列表/整数切片等参数,传入字符串直接触发类型错误。 - 你的实现思路不合理:用嵌套循环实现累计求和的效率极低,对于行数较多的DataFrame会非常慢,pandas已经提供了内置的向量化累计求和函数,不需要手动写循环。
正确实现方案
直接调用pandas内置的cumsum()方法即可,该方法会自动对每一列单独计算累计和,每一行的结果等于当前行值与之前所有行值的总和,完全匹配你的需求,代码如下:
# 对cost、margin两列计算累计求和,结果保存在新的DataFrame中 d_cumsum = d[['cost', 'margin']].cumsum()
如果你需要把累计求和的结果作为新列追加到原DataFrame中,可以这么写:
d[['cost_cumsum', 'margin_cumsum']] = d[['cost', 'margin']].cumsum()
原有循环的修正方案(不推荐使用,仅作错误演示)
如果一定要修正你原本的循环代码(性能远差于内置方法,不建议生产环境使用),只需要去掉stuff两边的单引号即可,但你原本的循环逻辑也无法得到正确的累计和结果,仅能修复报错:
for stuff in range(len(d)): for data in d.iloc[1:stuff]: print(data)
内容的提问来源于stack exchange,提问作者Slartibartfast
相关产品推荐
相关产品推荐

