为了账号安全,请及时绑定邮箱和手机立即绑定

Python numpy - 列表赋值索引超出范围

Python numpy - 列表赋值索引超出范围

江户川乱折腾 2021-10-19 15:46:38
我有以下格式的 CSV 文件86,115,219,352,415,513,618,720,849,9266,10为了可重复性,我在此处包含了完整的CSV 文件。从第 1 列开始,我想读取当前行并将其与前一行的值进行比较。如果它更大,我想取当前值与前一个值append的差异并将 ( ) 差异存储在列表中。如果当前值等于前一行的值,则继续比较。让我说清楚。例如,在我提供的上述示例记录中,第三行 ( 19) 大于第二行 ( 15) 中的值- 因此它将是 ( 19-15 =4)、第四行 ( 52-19 = 33) 等。这是我使用的简单方法 numpyimport numpy as npimport pandas as pdimport csvdf = 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。如何修复此错误以解决我提到的任务?
查看完整描述

3 回答

?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

您遇到的问题是,当您尝试运行 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)

如果您必须定期执行此操作,那么您始终可以将此方法包装起来。试试这个。


查看完整回答
反对 回复 2021-10-19
  • 3 回答
  • 0 关注
  • 236 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号