使用向量化时如何跳过前n行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用向量化时如何跳过前n行相关的知识,希望对你有一定的参考价值。

我正在使用矢量化对熊猫数据帧执行计算。我的计算使用了一定数量的先前行中的值。当前它返回错误:

IndexError: single positional indexer is out-of-bounds

由于前n行,因此前几行不足以执行计算。

我看到2个解决方案:

  • 对于每一行,检查先前的行是否足够执行计算
  • 在第n行之后开始计算

我不确定进行向量化时解决方案1是否可行。那解决方案2呢?有没有办法告诉系统仅从第n + 1行开始而不是从第0行(:)开始执行我的计算?

当前我的代码是:

df.iloc[:, 7] = df.iloc[:, 6] -  df[df.My_TS <= df.iloc[:, 5]-Time_gap].iloc[len(df[df.My_TS <= df.iloc[:, 5]-Time_gap])-1].Total_run_sum
答案

您写了我的计算使用了一定数量的先前行中的值。恐怕这不是真的。

请注意,在每种情况下使用iloc时,请使用[:: n]n是数字)。

实际上是指:

  • 计算涉及每一行),
  • 在每种情况下,数据都是从不同的列读取的,用方括号之间的第二个参数(567)。

还不清楚,在该点发生错误。要对此进行调查,请按如下所示重写上面的片段:

def fn(row):
    c6 = row.iloc[6]
    c5 = row.[5] - Time_gap
    wrk = df[row.My_TS <= c5]  # Rows meeting the criterion
    row2 = wrk.iloc[-1]        # The last row from wrk
    xx = row2.Total_run_sum
    return c6 - xx

然后应用它:

df.col7 = df.apply(fn, axis=1)

可能会发生相同的错误,但至少您会知道它发生的确切位置。

也许wrk在某些情况下将是一个空的DataFrame,所以:

  • 尝试获取最后一行将返回None或仅返回上面的错误。
  • 即使之前没有发生错误,也尝试获取Total_run_sum不存在的行中的列应引起一些错误。

以上是关于使用向量化时如何跳过前n行的主要内容,如果未能解决你的问题,请参考以下文章

在 Bash 中打印文件,跳过前 X 行 [重复]

python脚本 从第二行开始读取 文件读取 跳过第一行 跳过前几行

在读取 Python 文件中的行时跳过前几行

Stream skip()跳过前N个子元素

Stream skip()跳过前N个子元素

Stream skip()跳过前N个子元素