我有以下格式的 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)
如果您必须定期执行此操作,那么您始终可以将此方法包装起来。试试这个。
添加回答
举报
0/150
提交
取消