首页 > 解决方案 > Python numpy - 列表分配索引超出范围

问题描述

我有以下格式的 CSV 文件

86,1
15,2
19,3
52,4
15,5
13,6
18,7
20,8
49,9
266,10

为了重现性,我在此处包含了完整的 CSV 文件。从第 1 列开始,我想读取当前行并将其与前一行的值进行比较。如果它更大,我想将当前值与前一个值的append差值存储()到一个列表中。如果当前值等于前一行的值,则继续比较。让我说清楚。例如在我提供的上述示例记录中,第三行(19)大于第二行(15)中的值 - 所以它将是(19-15 =4),第四行(52-19 = 33)等。

这是我使用的简单方法numpy

import numpy as np
import pandas as pd
import csv

df = pd.read_csv("testdata.csv")
with open("testdata.csv") as f:
    reader = csv.reader(f, delimiter=",")
    for i in reader:
        print (i[0])
        diffs=np.diff(i[0])
        increased_value=np.median(diffs[diffs>0])

但是,我收到错误消息IndexError: list assignment index out of range。如何解决此错误以解决我提到的任务?

标签: pythonpython-3.xpandascsvnumpy

解决方案


我认为这是一个更好的方法

df = pd.read_csv("testdata.csv", header=None)
df
     0     1
0   86     1
1   15     2
2   19     3
3   52     4
4   15     5
5   13     6
6   18     7
7   20     8
8   49     9
9   266   10

diffs = np.diff(df[0])
increased_value = np.median(diffs[diffs>0])
increased_value

17.0

推荐阅读