江戶川亂折騰
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)
如果您必須定期執行此操作,那么您始終可以將此方法包裝起來。試試這個。
添加回答
舉報
0/150
提交
取消