Часть 2. Знакомство с методом pandas.DataFrame.loc
В библиотеке Часть 1 различных способов выбора данных внутри панд мы изучили и поняли метод pandas.DataFrame.iloc. В этом разделе мы рассмотрим и поймем метод pandas.DataFrame.loc и чем он отличается от метода pandas.DataFrame.iloc.
Мы видели в последней части статьи 1, что pandas.DataFrame.iloc
используется для выбора данных из фрейма данных на основе индекса.
В то время какpandas.DataFrame.loc
используется для выбора данных из фрейма данных на основе меток, которые назначаются столбцам и строкам. Во-первых, давайте создадим фрейм данных и назначим метки строк, а также метки столбцов.
import pandas as pd # here we have defined labels to rows as well as columns also, index #stands for row labels.# note some rows and columns can have same #names also. But it is wise tohave different labels df2 = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]], index=['cobra', 'viper', 'sidewinder'], columns=['max_speed', 'shield', 'velocity']) df2.head()
pandas.DataFrame.loc
pandas.DataFrame.loc
используется для выбора нескольких строк и столбцов из фрейма данных с использованием меток и логических массивов. Выдает ошибку, если вы передаете индексы. Он обеспечивает выбор на основе меток. Он может принимать минимум один аргумент и максимум два аргумента. Если передается один параметр, он возвращает строки, если метка совпадает со строками вместе со всеми столбцами, в противном случае он будет дополнительно проверять метки столбцов. Если он совпадает, он возвращает столбцы вместе со всеми строками. Примечание. Если вы присвоили одну и ту же метку одной строке и одному столбцу, то сначала выполняется проверка строк. Если метка строки совпадает с переданной меткой, возвращается эта строка, а не столбец.
pandas.DataFrame.loc[rows_params]
Если два параметра передаются через запятую, то первый означает строки, а второй — столбцы, и он возвращает строки и столбцы, указанные в параметрах.
pandas.DataFrame.loc[rows_params, column_params]
Здесь rows_params и columns_params могут быть указаны метки строк и метки столбцов, соответственно, могут быть срезами или диапазоном меток, а также могут быть вызываемыми функциями, которые возвращают одну из указанных выше вещей.
Когда row_params и column_params являются конкретными метками
# when only one single parameter is passed, it is considered label #for specific row and returns selectd row #"Retuns rows in series format when single label is passed-->" df2.loc['cobra']
# if you give single parameter inside double brackets, then it #return rows encapsulated within dataframe object df2.loc[['cobra']]
#when two parameters are given, it return rows and columns. # it returns all the rows in series format for the column having #labels max_speed, basically it returns max_speed column df2.loc[:,'max_speed'] # if you give second parameter inside double brackets, then it #return rows and columns encapsulated within dataframe object print("Returns rows and columns in dataframe format when labels are passed inside one more large bracket-->") df2.loc[:,['max_speed']]
Когда row_params и column_params являются списками определенных меток →
#To select multiple rows, we need to specify single parameters inside list, rows at labels 'cobra' and 'viper' are returned df2.loc['cobra':'viper'] # To select cross section of multiple rows and multiple columns we can specify second parameter inside list df2.loc[['cobra','sidewinder'], ['max_speed', 'shield']]
Когда row_params и column_params являются диапазоном списка ярлыков или фрагментом списка ярлыков →
#To select multiple rows, we can also specify single parameters inside list by giving range of labels , # rows from having labels cobra to viper(included) are returned, order of labels of rows matters here # It returns dataframe object, giving this parameter inside another large object gives error. df2.loc['cobra':'viper'] # to select cross section of multiple rows and multiple columns we can also specify range for column labels df2.loc['cobra':'viper', 'max_speed':'shield']
Когда row_params и column_params заданы как вызываемые функции →
# Condition that returns a boolean Series, It returns all rows #having shield value > 6 df2.loc[df2['shield'] > 6] # Condition2 that returns a boolean Series, It returns all rows #having shield value > 6 df2.loc[df2['shield'] > 6, ['max_speed']] # You can pass a callable function as parameter that returns a #boolean Series. It will return all rows satisfying that condition df2.loc[lambda x: x['shield'] == 8]
Вы также можете использовать этот метод pandas.DataFrame.loc
для установки значений в кадре данных для определенных строк и столбцов.
# It sets the all content of row having label 'cobra' equal to 8 df2.loc['cobra'] = 8 df2.head() # You can cell specific value of dataframe like this- df2.loc['cobra','shield'] = 18 df2.head()
Если вы указали метки строк, используя числовые значения явно при создании кадра данных. Затем pandas.DataFrame.loc
метод работает, задавая целочисленные значения в качестве параметров. Здесьpandas.DataFrame.loc
принимает целочисленные значения в качестве меток строк. То же самое касается и столбцов.
df3 = pd.DataFrame([[1, 2], [4, 5], [7, 8]], index=[7,8,9], columns=['max_speed', 'shield']) df3.loc[[7]] # If index are not defined explicitly,then by default integer #indices are used as row labels df4 = pd.DataFrame([[1, 2], [4, 5], [7, 8]], columns=['max_speed', 'shield']) df4.loc[1]
В этом разделе я подробно pandas.DataFrame.loc
объяснил. Я дал ссылку на блокнот Google Colab здесь, Вы можете запустить код здесь. Надеюсь, вам всем понравилась эта статья и вы получили знания. Спасибо, что уделили свое драгоценное время. В следующем разделе мы рассмотрим другие методы, доступные в pandas для выбора данных.
Если вам понравилось читать эту статью, вы можете похлопать в ладоши и подписаться на меня на Medium. Я также хотел бы услышать ваши ответы, поэтому, пожалуйста, поделитесь своими мыслями. Спасибо.
Дополнительные материалы на PlainEnglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter и LinkedIn. Присоединяйтесь к нашему сообществу Discord.