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

pandas实现间隔行逐列求比率减1及解决类型报错问题

报错原因

你触发TypeError: can only concatenate str (not "int") to str的核心原因是for i in df的写法遍历的是DataFrame的列名(字符串类型的表头值),直接对字符串做加整数的操作自然会报类型错误。同时你的现有代码逻辑和目标计算规则不匹配:既写错了行间隔数,循环赋值的方式也无法得到全表计算结果。

实现方法

优先用pandas原生向量化运算,不需要写循环,运行效率更高,逻辑也更简单:

import pandas as pd

# 实现逻辑:df向上移4行后,逐位置除以原df再减1,和你要的第i+4行/第i行-1规则完全对齐
df_result = df.shift(-4) / df - 1

计算完成后,结果表最后4行因为没有对应的i+4行数据,会返回空值NaN,如果不需要空值直接加一行删除即可:

df_result = df_result.dropna()

如果你一定要用iloc按行遍历实现(不推荐,数据量大时运行速度会慢很多),正确写法如下:

res = []
# 行索引只遍历到倒数第5行,避免i+4超出表的总行数范围
for i in range(len(df) - 4):
    row_calc = df.iloc[i+4] / df.iloc[i] - 1
    res.append(row_calc)
# 结果列表转成和原表列名一致的DataFrame
df1 = pd.DataFrame(res, columns=df.columns)
原代码的具体问题
  • 遍历对象错误:直接遍历df拿到的是列名字符串,不是行序号,无法做数值加减
  • 计算间隔错误:你写的i+54和目标的i+4间隔不符
  • 赋值逻辑错误:每次循环都重新把df1赋值为单元素列表,最终只会保留最后一次循环的计算值,得不到全表结果

内容的提问来源于stack exchange,提问作者barney stinson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 07:18:17