#!/usr/bin/env python
# coding: utf-8

# ### Урок 5.3: индексы и метод `.loc`

# In[3]:


import pandas as pd
df = pd.DataFrame([['Anna', 23, 3],
             ['Sam', 36, 12],
             ['Bill', 33, 10],
             ['Moica', 25, 7],
             ['Lisa', 27, 7],
             ['Peter', 32, None]])
df.columns = ['name', 'age', 'expr']  


# Теперь посмотрим, как выбирать столбцы и строки по названию. Выберем столбец `name`, вписав его название в квадратных скобках:

# In[4]:


df['name']


# Если нужно выбрать более одного столбца сразу, то названия столбцов нужно оформить в список и поместить его в квадратные скобки:

# In[5]:


df[['name', 'expr']]


# Хорошая новость: помимо числовых срезов в `Pandas` можно использовать текстовые срезы, то есть, сейчас я могу, например, выбрать все столбцы с `name` до `age` подряд. Только тогда этот срез нужно будет указать в методе `.loc`:

# In[6]:


df.loc[:, 'name':'age']


# Обратите внимание: текстовый срез включает оба конца отрезка, правый конец не исключается.

# Метод `.loc` будет работать так же, как и `.iloc`, только здесь в качестве идентификаторов будут использоваться названия. Для удобства назовём строки по столбцу `name`, чтобы к ним можно было обращаться по названию:

# In[7]:


df.index = df.name
df


# Теперь у строк есть текстовые названия. Выберем значение, соответствующее возрасту Билла:

# In[10]:


df.loc['Bill', 'age']


# А теперь опыт работы для нескольких человек (строк) подряд:

# In[11]:


df.loc['Sam':'Lisa', 'expr']


# А теперь два столбца одновременно (представим, что они идут не подряд, более общий способ):

# In[12]:


df.loc['Sam':'Lisa', ['age', 'expr']]

