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

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

# In[1]:


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]])


# Чтобы наш датафрейм был больше похож на настоящие данные из файла, давайте назовём столбцы в таблице. Для этого нам необходимо изменить атрибут `.columns`, присвоить ему значение в виде списка.

# In[2]:


df.columns = ['name', 'age', 'expr']  


# In[3]:


df


# Для выбора строк и столбцов в `Pandas` есть два основных метода: `.iloc` и `.loc`. Первый используется для выбора строк и столбцов по их индексу, второй – по их названию. Внутри каждого из этих методов в квадратных скобках указывается сначала идентификатор (индекс или название) строки, а затем – идентификатор столбца. Попробуем выбрать элемент, который находится в строке с индексом 1 и в столбце с индексом 2:

# In[4]:


df.iloc[1, 2]


# В качестве индексов можно указывать числовые срезы (как обычно, правый конец отрезка не включается):

# In[11]:


df.iloc[1:3, 1]


# И полные срезы тоже:

# In[12]:


df.iloc[:, 0]


# In[13]:


df.iloc[1:3, :]


# Можно попробовать ввести индекс без `.loc` и посмотреть, что получится: 

# In[9]:


df[0]


# Ничего не получится: Python думает, что в квадратных скобках указано название столбца и возвращает `KeyError`, что означает, что столбца с таким названием в таблице нет. Самое интересное: если мы укажем в квадратных скобках числовой срез, всё сработает! Только Python будет воспринимать эти числа как индексы строк (да `pandas` коварна, к ней нужно привыкнуть):

# In[10]:


df[0:2]

