Часть 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.