2016-01-25 1 views
1

Я довольно новичок в программировании на Python и уже столкнулся с проблемой, которая сводит меня с ума. Я продолжал искать проблему - даже здесь, при переполнении стека. Однако у меня не было решения для решения моей проблемы, что заставило меня зарегистрироваться на этом сайте.Построение txt-файла с данными даты, времени и значения

Тем не менее, это моя проблема:

У меня есть несколько текстовых файлов, которые содержат 3 колонков. Первым можно пренебречь, во втором - смесь даты и времени, разделенная буквой «Т», а в третьем столбце содержится значение (давление, температура, что так всегда).

Теперь я хочу, чтобы построить второй столбец (время и дату) по оси x и значение по оси y.

Я пробовал МНОГИЕ коды - также некоторые из них описаны здесь при переполнении стека, но ни один из них не был тем, который я искал, и принес правильный результат.

Более подробно, это то, что мои текстовые файлы выглядеть следующим образом:

# MagPy ASCII
234536326.456,2014-06-17T14: 23: 00.000000,459.7463393940044 674346235.235,2014-06-17T14: 28: 00.000000,462.8783040474751 и так далее.

Забудьте о первом столбце. Только вторая и третья важны. Итак, здесь, я думаю, мне нужно пропустить первую строку (и первую колонку), верно?

ОДНАКО - и здесь приходит часть, которую я не могу решить - с этим «Т» внутри второго столбца это становится строковым форматом. Один из моих многочисленных ошибок я получаю: не удалось преобразовать строку плавать

Ну, я искал переполнение стека и наткнулся на следующий код:

x, y = np.loadtxt('example.txt', dtype=int, delimiter=',', 
       unpack=True, usecols=(1,2)) 

plt.plot(x, y) 

plt.title('example 1') 
plt.xlabel('D') 
plt.ylabel('Frequency') 
plt.show() 

Я редактировал «usecols» 1 и 2 , но с этим кодом я получаю ошибку: индекс индекса за пределами диапазона

Итак, не имеет значения, что я делаю, я получаю сообщение об ошибке в любое время. И единственное, что я хочу - это график (с matplotlib), который содержит время и дату по оси x и значение (например, 459.7463393940044 сверху) на оси y. И говорить о том, что мне нужно: в конце я должен поставить несколько диаграмм (около 4-6), которые были сгенерированы с МНОГО файлами данных txt, на одном рисунке.

Пожалуйста, помогите мне с этим? Буду признателен за вашу помощь!

ответ

0

Это формат numat datetime. Вам нужно добавить явный конвертер для поля datetime. documentation содержит дополнительную информацию о формате. This вопрос показывает, как заполнить преобразователи аргумент.

date, closep, highp, lowp, openp, volume = 
    np.loadtxt(f, delimiter=',', unpack=True, 
     converters={0:mdates.strpdate2num('%d-%b-%y')}) 

Этого достаточно, чтобы привести вас к полному решению?

+0

Ok. Как-то мой ответ появляется выше вашего !? – MaxPy

+0

Не проблема. Их обычно сортируют по голосам; Я не знаю, как разрешаются связи. Вероятно, вы можете посмотреть это в группе ** Meta **, где должно идти любое будущее обсуждение. – Prune

0

Во-первых, спасибо за ваш ответ! К сожалению, это совсем не работает. Я попробовал это с вашим конвертером и объединил его с моим кодом, но это не сработало.Я пробовал тогда этот код:

# Converter function 
datefunc = lambda x: mdates.date2num(datetime.strptime(x, '%d %m %Y %H %M %S')) 

# Read data from 'file.dat' 
dates, levels = np.genfromtxt('BMP085_10085001_0001_201508.txt', # Data to be read 
          delimiter=19, # First column is 19 characters wide 
          converters={1: datefunc}, # Formatting of column 0 
          dtype=float, # All values are floats 
          unpack=True) # Unpack to several variables 

fig = plt.figure() 
ax = fig.add_subplot(111) 

# Configure x-ticks 
ax.set_xticks(dates) # Tickmark + label at every plotted point 
ax.xaxis.set_major_formatter(mdates.DateFormatter('%d/%m/%Y %H:%M')) 

ax.plot_date(dates, levels, ls='-', marker='o') 
ax.set_title('title') 
ax.set_ylabel('Waterlevel (m)') 
ax.grid(True) 

# Format the x-axis for dates (label formatting, rotation) 
fig.autofmt_xdate(rotation=45) 
fig.tight_layout() 

fig.show() 

И снова получаю индекс индекса за пределами диапазона. Серьезно, я не знаю никакого возможного решения, чтобы в конце это выглядело так: {Plot date and time (x axis) versus a value (y axis) using data from file} - см. Диаграмму внизу страницы.

+0

Любые идеи, как решить проблему !? – MaxPy

0

У меня был успех, делающий следующее. Во-первых, это нормально читать в вашей дате ISO8601 в виде строки (так что основное чтение строки и разделение на запятую будут работать). Чтобы преобразовать строку даты в объект datetime, вы можете использовать

import dateutil 

# code to read in date_strings and my_values as lists goes here ... 

# Here's the magic to parse the ISO8601 strings and make them into datetime objects 

my_dates = dateutil.parser.parse(date_strings) 

# Now plot the results 

fig = plt.figure() 
ax = fig.add_subplot(1,1,1)  
ax.plot_date(x=my_dates, y=my_values, marker='o', linestyle='') 
ax.set_xlabel('Time') 
Смежные вопросы