не удалось преобразовать строку в float: ’12-31′

#python #python-3.x #pandas #dataframe #matplotlib

Вопрос:

Мне нужно построить 2 линии с минимальной и максимальной температурой в день

Мой фрейм данных выглядит так:

  Date  min  max  min2015  max2015
0    01-01 -160  156     -133       11
1    01-02 -267  139     -122       39
2    01-03 -267  133      -67       39
3    01-04 -261  106      -88       44
 

Столбец даты, который я отформатировал только днем и месяцем, а не годом, причина в том, что это СМЕСЬ и СОЧЕТАНИЕ температур между 2004-2014 годами, вот почему года нет.

поэтому я попытался построить такой сюжет:

  fig, ax = plt.subplots(figsize=(10, 6))
    axb = ax.twinx()

    # Same as above
    ax.set_xlabel('Date')
    ax.set_ylabel('Temp')
    ax.set_title('Min and Max temperature 2004-2014')
    ax.grid(True)

    # Plotting on the first y-axis
    ax.plot(new_df.Date, new_df['min'], color='tab:orange', label='Min')
    ax.plot(new_df.Date, new_df['max'], color='tab:olive', label='Max')
 

Но я понимаю это:

 ValueError: could not convert string to float: '12-31'
 

Комментарии:

1. Pandas 1.2.4, Matplotlib 3.3.4 — не удается воспроизвести проблему.

Ответ №1:

функция ‘plot’ не может идентифицировать строковый тип, вместо этого вы можете использовать функцию ‘plot_date’.

 plt.xlabel('Date')
plt.ylabel('Temp')
plt.title('Min and Max temperature 2004-2014')
plt.grid(True)

plt.plot_date(['01-01', '01-02', '01-03'], [13, 15, 12], color='tab:orange', label='Min')
plt.show()
 

тогда вы можете получить такую картинку, как
этот

Комментарии:

1. спасибо, если я заменю plot на plot_date, то получу следующее: ошибка: объект ‘str’ не имеет атрибута ‘toordinal’

2. возможно, вы можете попробовать обновить свою версию matplotlib.

3. работаем над этим: установка pip —обновление matplotlib