#python #matplotlib
#python #matplotlib
Вопрос:
Я впервые использую python и matplotlib, и я хотел бы вывести данные из файла CSV.
Файл CSV имеет вид:
10/03/2018 00:00,454.95,594.86
содержит около 4000 строк. Я хотел бы отобразить данные из второго столбца в сравнении с datetime для каждой строки и данные из третьего столбца в сравнении с datetime для каждой строки, оба на одном графике.
Пока это мой код, но он не работает:
import matplotlib.pyplot as plt
import csv
import datetime
import re
T = []
X = []
Y = []
with open('Book2.csv','r') as csvfile:
plots = csv.reader(csvfile, delimiter=',')
for row in plots:
datetime_format = '%d/%m/%Y %H:%M'
date_time_data = datetime.datetime.strptime(row[0],datetime_format)
T.append(date_time_data)
X.append(float(row[1]))
Y.append(float(row[2]))
plt.plot(T,X, label='second column data vs datetime')
plt.plot(T,Y, label='third column data vs datetime')
plt.xlabel('DateTime')
plt.ylabel('Data')
plt.title('Interesting GraphnCheck it out')
plt.legend()
plt.show()
Любая помощь или руководство были бы замечательными. Большое спасибо! 🙂
Комментарии:
1. Какова ваша функция? не могу помочь вам без этого.
2. Извините, я, вероятно, должен был сделать это более понятным. Мне просто нужен простой график точек данных из второго и третьего столбцов в зависимости от даты и времени. Спасибо.
3. это файл .txt или csv?
4. Это CSV-файл
5. @Talal смотрите мой ответ, надеюсь, это поможет вам
Ответ №1:
Вы могли бы использовать pandas для чтения CSV-файла
import pandas as pd
data = pd.read_csv('file_name.txt', header = None)
Оттуда вы можете использовать фрейм данных pandas в качестве входных данных для matplot. Хороший учебник можно найти здесь
Ответ №2:
Я надеюсь, что это поможет вам:
import csv
import numpy as np
a = []
with open('table.csv') as f: # Let's say your data is at 'table.csv'
f_csv = csv.reader(f)
for row in f_csv:
a.append(row) # Get each line
b = np.array(a) # Make it as a numpy array
c = b[:,[1,2]] # Filter it by column
print(c)
Ответ №3:
import matplotlib.pyplot as plt
import csv
x = []
y = []
with open('example.csv','r') as csvfile:
plots = csv.reader(csvfile, delimiter=',')
for row in plots:
x.append(float(row[2]))
y.append(float(row[3]))
plt.plot(x,y, label='Loaded from file!')
plt.xlabel('x')
plt.ylabel('y')
plt.title('Interesting GraphnCheck it out')
plt.legend()
plt.show()
не забудьте изменить имя файла в моем примере или указать правильный путь, если вы открываете файл из другого местоположения, если ваш файл имеет значение с плавающей запятой, измените x.append(int(row[0])) на x.append(float(row[0])) и то же самое для y
Комментарии:
1. Ваше преобразование в
int
завершится ошибкойrow[0]
, потому что это datetime, а не строка с плавающей точкой или числового типа2. верно, я приводил только общий пример, поскольку он не привел подробностей, но если в файле есть данные, записанные так, как он показывает, это завершится неудачей
3. В вопросе говорится, что я хотел бы построить второй и третий столбцы , поэтому просто отредактируйте, и ваш ответ должен сработать
4. Привет, ребята, я попробовал предложенный вами код, но у меня не получилось. Я внес некоторые правки в свой оригинал и вопрос и опубликовал код. Смотрите выше.