Member 13225387 Ответов: 1

Как отсортировать мои значения в соответствии с моей датой из CSV-файла в Python?


У меня есть исторические данные NSE за 2016 и 2017 годы в CSV-файле. Теперь мне нужен график, который отображает мои начальные значения в сравнении с меткой времени, присутствующей в csv-файле. Если метка времени была отсортирована мной, то каков код для сортировки начальных значений, чтобы они тоже были отсортированы в соответствии с меткой времени?

Ниже приведен код. Мне нужен код для сортировки моих начальных значений (openf) в соответствии с датой.

Что я уже пробовал:

import csv
import codecs
import numpy as np
import matplotlib.pyplot as plt
# reading csv file
filepath = "nse_data.csv"
with codecs.open(filepath,"r") as csvfile:
    reader = csv.reader(csvfile)
    data = [row for row in reader]
    
x = np.shape(data)
i = 2
j = 0
openf = []
close = []
high = []
low = []
date = []
openf.append(data[1][2])
close.append(data[1][5])
high.append(data[1][3])
low.append(data[1][4])
date.append(data[1][10])
while(i<x[0]):
    if(data[i][j] == data[1][0]):
        openf.append(data[i][2])
        date.append(data[i][10])
        close.append(data[i][5])
        high.append(data[i][3])
        low.append(data[i][4])
        print("Analysed ",data[i][j])
        print("Analysed ",data[i][10])
    i = i + 1
print(openf)
#print(close)
#print(high)
#print(low)
print(len(openf))
print(len(date))
date.sort() #date has been sorted in increasing order
print(date)
plt.plot(date,openf, label = "Opening Values")
plt.xlabel('date')
plt.ylabel('openf')
plt.title('Graph of opening Values')
plt.legend()
plt.show()

1 Ответов

Рейтинг:
4

User 7429338

Вместо того чтобы создавать отдельные массивы для openf, close, high, low и date, вы можете создать класс, обладающий этими свойствами:

class Row:

	def __init__(self, openf, close, high, low, date):
		self.openf = openf
		self.close = close
		self.high = high
		self.low = low
		self.date = date

Создайте массив этого класса:
rows = []

Наполнить ее:
while(i<x[0]):
	if(data[i][j] == data[1][0]):
		rows.append(Row(data[i][2], data[i][5], data[i][3], data[i][4], data[i][10]))
		print("Analysed ",data[i][j])
		print("Analysed ",data[i][10])
	i = i + 1

И разобраться в этом:
rows.sort(key=lambda x: x.date)

Если ваш код построения графика требует отдельных массивов и вы хотите сохранить его таким образом, вы можете создать массивы следующим образом:
date = []
openf = []
for row in rows:
	date.append(row.date)
	openf.append(row.openf)