Как импортировать числа из текстового файла с пробелами и построить его - PullRequest
0 голосов
/ 06 сентября 2018

Код, который у меня есть

import matplotlib.pyplot as plt
import numpy as np

x, y = np.loadtxt('data.txt', delimiter=',', unpack=True)

plt.plot(x,y, label='test')


plt.xlabel('Date')
plt.ylabel('F10.7 flux')
plt.title('Solar Cycle 23')
plt.legend()
plt.show()

Файл data.txt содержит 4000 записей даты ГГГГ ММ ДД, число:

1996 08 01, 82.8
1996 08 02, 81.9
1996 08 03, 81.6
1996 08 04, 79.9
1996 08 05, 76.2
1996 08 06, 75.1

и я получаю ошибку

ValueError: could not convert string to float: '1996 08 01'

Как мне преобразовать его в строку и при этом правильно отобразить на графике?

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

Используя панды, информация о дате и времени может быть проанализирована во время создания DataFrame с помощью parse_dates=[0], указывая, что первый столбец должен содержать данные даты и времени.

примечание; нет необходимости предпринимать промежуточный шаг по назначению столбцов df для x и y.

import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv('solar.txt', names=['date', 'value'], parse_dates=[0])
plt.plot(df.date, df.value, label='test')
plt.xticks(rotation='45')

plt.xlabel('Date')
plt.ylabel('F10.7 flux')
plt.title('Solar Cycle 23')
plt.legend()
plt.show()

enter image description here

0 голосов
/ 06 сентября 2018

Для этого вы можете использовать панд . В частности, функция read_csv , которая возвращает DataFrame .

Проблема не в 4000 баллов. Но x - это строка (дата в виде строки). Попробуйте преобразовать их в datetime, чтобы упростить управление.

import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv('data.txt', names=['date', 'value'])

# We convert the str to datetime
x = pd.to_datetime(df.date)
y = df.value

plt.plot(x,y, label='test')

plt.xlabel('Date')
plt.ylabel('F10.7 flux')
plt.title('Solar Cycle 23')
plt.legend()

plt.show()

test_plot

Будьте осторожны, что df.date и df.value Это не массив, это серия панд . Чтобы получить доступ к значениям (только для массива):

x = df.date.values
y = df.value.values
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...