#python #pandas #dataframe #matplotlib
Считываю данные: data = pd.read_csv('data.csv',';', index_col=['month'], parse_dates=['month'], dayfirst=True) Смотрю на них: print data.shape print data.columns data.head() Вывод: (168, 1) Index([u'milk'], dtype='object') month milk 1962-01-01 589 1962-02-01 561 1962-03-01 640 1962-04-01 656 1962-05-01 727 В какой-то момент мне необходимо построить график количества во времени. Каким образом получить данные колонки индексов (month)? Напомню, что мы ее указали индексом и в данных у нас только одна колонка с количеством. Конечно, можно отобразить как data.plot(), но мне хотелось бы сделать это вызвав plot у matplotlib. Дополнительно вопрос о лучших практиках: в каких случаях обоснованно / следует использовать данные в качестве индекса?
Ответы
Ответ 1
Судя по выводу data.head(), вы либо не указали параметр index_col=['month'] либо он отработал не так как ожидалось и столбец month оказался обычным столбцом, вместо того чтобы стать индексом. Чтобы получить значения индекса DataFrame'а, достаточно воспользоваться атрибутом DataFrame.index. Пример: In [129]: df = pd.DataFrame({'val':np.random.rand(100)}, index=np.arange(100, 200)) In [130]: df Out[130]: val 100 0.924396 101 0.960312 102 0.728403 103 0.435330 104 0.599777 .. ... 195 0.055345 196 0.560087 197 0.049506 198 0.819265 199 0.231141 [100 rows x 1 columns] In [131]: plt.plot(df.index, df['val']) Out[131]: [] UPDATE: если на оси X - дата/время, то проще воспользоваться Pandas для визуализации: In [154]: df = pd.read_csv(r'C:\download\data.csv', sep=';', parse_dates=True, index_col=0) In [155]: df Out[155]: milk month 1962-01-01 589 1962-02-01 561 1962-03-01 640 1962-04-01 656 1962-05-01 727 In [156]: df.plot(y='milk') Out[156]: Значения индекса DataFrame: In [157]: df.index Out[157]: DatetimeIndex(['1962-01-01', '1962-02-01', '1962-03-01', '1962-04-01', '1962-05-01'], dtype='datetime64[ns]', name='month', freq=None)
Комментариев нет:
Отправить комментарий