Как отобразить дату и время по оси X относительно значения Y (Python) - PullRequest
0 голосов
/ 30 мая 2018

Данные

2018.05.01,01:15,1.206870,1.206920,1.206870,1.206920,0
2018.05.01,01:16,1.206910,1.206910,1.206810,1.206820,0

Код

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as mdates    

data1 = pd.read_csv('DAT_MT_EURUSD_M1_201805.csv')

date, time, closep, highp, openp = np.loadtxt(data1, 
                                              delimiter=',',
                                              unpack = True,
                                              dtype=float,
                                              converters ={0: bytespdate2num('%Y%m%d%H:%M')})

В конце есть ошибка

ValueError: данные времени u'2018.05.01 'не соответствуют формату'% Y% m% d% H:% M '

Похоже, мне нужно написать функцию преобразователя, чтобы соответствоватьформат даты, но я не знаю как.

Пожалуйста, предложите.

Ответы [ 3 ]

0 голосов
/ 30 мая 2018

Ваша дата и время разделены запятой, которую вы разделяете, поэтому вы получаете неверные результаты.Вы должны предварительно отформатировать файл, чтобы удалить эту первую запятую:

data = []
with open('test.txt') as f:
  for line in f:
    data.append(line.replace(',', ' ', 1))

with open('test.txt', 'w') as outf:
  outf.write(''.join(data))

# 2018.05.01 01:15,1.206870,1.206920,1.206870,1.206920,0
# 2018.05.01 01:16,1.206910,1.206910,1.206810,1.206820,0

Убедитесь, что вы запустите это только один раз, иначе будет удалено больше запятых.

Которые затем можно легко проанализировать ввремя использования панд (которое вы уже используете):

df = pd.read_csv('test.txt', header=None)
pd.to_datetime(df[0])

0   2018-05-01 01:15:00
1   2018-05-01 01:16:00
Name: 0, dtype: datetime64[ns]
0 голосов
/ 30 мая 2018

Вы можете напрямую попросить pd.read_csv() проанализировать дату и время с помощью ключевого аргумента parse_date:

import pandas as pd
import matplotlib.pyplot as plt

# Read data AND parse time stamps (date + time) given by columns 0 and 1
data = pd.read_csv('data.csv', sep=',', header=None, parse_dates=[0, 1])

# Plot and save figure
plt.plot(data[[1]], data[[2, 3, 4, 5]])
plt.savefig('pandas_plot.png')

С учетом двух предоставленных вами строк данных (которые я хранил в data.csvфайл), этот сценарий создает следующий рисунок (где вы можете увидеть данные, выбранные в две разные даты):

plotting data with pandas and matplotlit

0 голосов
/ 30 мая 2018

Просто измените формат на %Y.%m.%d, чтобы добиться цели, вам не хватает точек между ними.

Если нет, вы также можете попробовать dateutil, который анализирует большинство форматов даты для вас:

import dateutil

dateutil.parser.parse(my_date_str)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...