2016-04-29 5 views
1

Я пытаюсь построить следующие данные в формате CSV, как оси х с Matplotlib:Matplotlib: Преобразовать час строка плавать

Time 
00:00:00 
01:00:00 
02:00:00 
03:00:00 
04:00:00 
05:00:00 
06:00:00 
07:00:00 
08:00:00 
09:00:00 
10:00:00 
11:00:00 
12:00:00 
13:00:00 
14:00:00 
15:00:00 
16:00:00 
17:00:00 
18:00:00 
19:00:00 
20:00:00 
21:00:00 
22:00:00 
23:00:00 

Но я получаю сообщение об ошибке:

ValueError: could not convert string to float: '23:00:00' 

Как Могу ли я преобразовать эти значения в формат Hour в matplotlib?

Вот мой код:

fig = plt.figure(figsize=(15,7)) 
ax = fig.add_subplot(1,1,1) # row-col-num 
# --- line plot data on the Axes 
ax.plot(df3['YYYY-MO-DD HH-MI-SS_SSS'], df3['ATMOSPHERIC PRESSURE (hPa) mean'], 'b-', linewidth=2, 
label=r'office Phone1') 

Любые идеи?

Спасибо!

ответ

2

Сообщение об ошибке

ValueError: could not convert string to float: '23:00:00' 

означает, что один из входов - вероятно, df3['YYYY-MO-DD HH-MI-SS_SSS'] - содержит строки, когда ax.plot ожидал поплавки.

ax.plot, однако, может принимать объекты типа datetime вместо поплавков. Таким образом, было бы достаточно преобразовать df3['YYYY-MO-DD HH-MI-SS_SSS'] в объекты типа datetime.

Использование панд, вы можете сделать это с помощью параметра pd.read_csvparse_dates (при условии, df3 определяется с pd.read_csv), или вы можете преобразовать этот столбец даты и времени, как объекты, после того, как-фактум:

date_col = 'YYYY-MO-DD HH-MI-SS_SSS' 
df3[date_col] = pd.to_datetime(df3[date_col]) 

Например,

import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 

np.random.seed(2016) 
date_col = 'YYYY-MO-DD HH-MI-SS_SSS' 

df = pd.DataFrame({date_col: [ 
    '00:00:00', '01:00:00', '02:00:00', '03:00:00', '04:00:00', '05:00:00', 
    '06:00:00', '07:00:00', '08:00:00', '09:00:00', '10:00:00', '11:00:00', 
    '12:00:00', '13:00:00', '14:00:00', '15:00:00', '16:00:00', '17:00:00', 
    '18:00:00', '19:00:00', '20:00:00', '21:00:00', '22:00:00', '23:00:00'], 
       'foo': np.random.random(24)}) 
df[date_col] = pd.to_datetime(df[date_col]) 

fig, ax = plt.subplots() 
ax.plot(df[date_col], df['foo'], 'b-', linewidth=2, label='foo') 
plt.show() 

enter image description here

+0

Спасибо! Это определенно сработало! – ValientProcess

+0

Я не уверен, действительно ли нужно идти на эту сложность. Pandas - хорошая библиотека, но вы можете конвертировать эти строки в объект datetime без панд. – Chiel

+0

@Chiel: Возможно, это было самонадеянно, но когда я увидел, что переменная была названа 'df3', я предположил, что это Pandas DataFrame. Если это правильно, то нет оснований не пользоваться преимуществами предложений Pandas. – unutbu

Смежные вопросы