Эта статья является продолжением первой, в которой мы узнали, как создавать фреймы данных и загружать данные в фреймы данных из файлов CSV и Excel.
В сегодняшнем уроке мы узнаем, как выбирать данные из фрейма данных. Давайте загрузим данные об акциях из Yahoo Finance, щелкнув ссылку для загрузки на странице, которая позволит вам загрузить данные в виде файла CSV. Это исторические данные по акциям S&P 500. Я переименовал файл в stocks.csv. Начнем с импорта панд и загрузки данных из CSV-файла. Вы можете скачать файл CVS и блокнот с этим кодом здесь.
import pandas as pd data=pd.read_csv('stocks.csv')
Давайте посмотрим на столбцы, которые у нас есть в нашем DataFrame.
data.columns
Мы получаем следующий вывод:
Index(['Date', 'Open', 'High', 'Low', 'Close', 'Adj Close', 'Volume'], dtype='object')
Использование свойства loc:
loc можно использовать для извлечения данных на основе меток. По умолчанию столбец индекса фрейма данных считается меткой. Итак, в наших данных, если мы хотим получить данные во всех столбцах в строке 3, мы будем использовать:
data.loc[3]
Вывод:
Date 2020-01-15 Open 3282.27 High 3298.66 Low 3280.69 Close 3289.29 Adj Close 3289.29 Volume 3716840000 Name: 3, dtype: object
Однако для простоты чтения было бы лучше назначить более разумные метки. Таким образом, в наших данных, поскольку их можно рассматривать как данные временных рядов, мы можем назначить столбцы даты в качестве индекса.
data.index=data['Date']
Теперь, когда мы используем даты в качестве меток, получить данные будет очень просто. Скажем, мы хотим просмотреть данные за 4 января.
data.loc['2021-01-04']
Вывод:
Date 2021-01-04 Open 3764.61 High 3769.99 Low 3662.71 Close 3700.65 Adj Close 3700.65 Volume 5006680000 Name: 2021-01-04, dtype: object
Теперь предположим, что нас интересует конкретный столбец, скажем, цена закрытия. Мы можем сделать это, передав имя столбца.
data.loc['2021-01-04', 'Close']
Вывод:
3700.649902
Чтобы получить данные из более чем одного столбца, вы передаете имена столбцов в виде списка. Точно так же, если вам нужны данные из более чем одной строки, вы также можете передать метки в виде списка.
print(data.loc['2021-01-04', ['Open', 'Close']]) # Open and close for Janurary 4 and 5. print(data.loc[['2021-01-04','2021-01-05'], ['Open','Close']]) Open 3764.61 Close 3700.65 Name: 2021-01-04, dtype: object Open Close Date 2021-01-04 3764.610107 3700.649902 2021-01-05 3698.020020 3726.860107
Теперь, если вы хотите просмотреть определенные столбцы для всего DataFrame, вы можете сделать это следующим образом:
print(data.loc[:, ['Open','Close']]) Open Close 0 3281.810059 3265.350098 1 3271.129883 3288.129883 2 3285.350098 3283.149902 3 3282.270020 3289.290039 4 3302.969971 3316.810059 .. ... ... 247 3764.610107 3700.649902 248 3698.020020 3726.860107 249 3712.199951 3748.139893 250 3764.709961 3803.790039 251 3815.050049 3824.679932 [252 rows x 2 columns]
Использование «iloc»:
iloc позволяет извлекать данные на основе воображаемого числового индекса. Обратите внимание, что числовой индекс является мнимым, что означает, что это фактический столбец индекса. Например, в наших данных столбец «Дата» был назначен индексом. Но с помощью iloc вы можете извлекать данные на основе номеров индексов, начиная с 0. Так, например, если вы хотите получить строку с индексом 0, вы можете сделать это следующим образом:
data.iloc[0]
Вывод:
Date 2020-01-10 Open 3281.81 High 3282.99 Low 3260.86 Close 3265.35 Adj Close 3265.35 Volume 3212970000 Name: 0, dtype: object
Аналогичным образом вы можете использовать iloc для извлечения данных из определенной строки и столбца, предоставляя индексы для обоих. Скажем, мы хотим получить данные из 2-й строки и 3-го столбца.
data.iloc[2,3]
Вывод:
3277.189941
Можно задаться вопросом, какая польза от этого. В наших данных, отображающих изображения, вы хотите получить последние 3 строки. Вы можете сделать это, используя iloc.
print(data.iloc[-1]) Date 2021-01-08 Open 3815.05 High 3826.69 Low 3783.6 Close 3824.68 Adj Close 3824.68 Volume 4764180000 Name: 251, dtype: object
Так же, как и список, вы можете использовать индексы для получения даты или диапазона данных с начала или конца, а также использовать шаги. Например, вы хотите выбрать каждую 3-ю строку, вы можете это сделать.
data.iloc[::3]
Используя iloc, мы можем фактически установить значение ячеек. Например, в наших данных, скажем, мы хотим установить громкость на 0 для каждой второй строки.
data.iloc[::2,6]=0
Условный выбор данных:
Панды также позволяют нам выбирать и удалять строки условно. Например, мы хотим отображать данные только за те даты, когда цена закрытия была выше средней цены закрытия. Для этого сначала мы определяем условие, присваиваем его объекту, а затем передаем этот объект в свойство loc.
high_close=data.Close>data.Close.mean() data.loc[high_close]
Другим примером может быть выбор даты с определенной ценой. Итак, нам нужны данные за тот день, когда цена закрытия была 3700,649902.
condition = data.Close == 3700.649902 data.loc[condition]
Вот и все, ребята. Панды действительно обладают некоторыми сверхспособностями, и эффективная фильтрация данных определенно является одной из них.