猿问

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。如何修复此错误以解决我提到的任务?


江户川乱折腾
浏览 237回答 3
3回答

一只萌萌小番薯

您遇到的问题是,当您尝试运行 np.diff 时,数组的默认 dtype 是 dtype U3,这意味着数组中的值不是数字,这意味着需要进行转换。请尝试以下操作:with open("test_data.csv", "r") as f:    reader = csv.reader(f) ## no need for delimiter if your delimiter is ','    data = []    for row in reader:        data.append(row[0])## ensure that you convert your data into numpy array with appropriate data type ## before carrying out any mathematical operations np_array = np.array(data, dtype=np.uint8) np_diff = np.diff(np_array)np_median = abs(np.median(np_diff[np_diff > 0]))print(np_median)如果您必须定期执行此操作,那么您始终可以将此方法包装起来。试试这个。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答