[БЕЗ_ЗВУКА] В этом виде мы начнем знакомство с библиотекой Pandas.
Pandas — очень мощный инструмент для анализа данных в Python.
Pandas позволяет нам работать с данными в виде таблиц.
Это очень естественное представление данных в задачах анализа.
Например, если мы решаем задачу классификации данных,
то часто мы работаем с матрицей «объект-признак».
В этом случае по строчкам у нас идут объекты, а по столбцам их признаки.
Опять же, если мы решаем задачу построения рекомендательных систем,
снова мы работаем с таблицами.
Мы работаем с таблицей «user-item» или с матрицей предпочтений.
Итак, переходим к нашей библиотеке.
Сначала нам нужно ее импортировать.
Делаем это с помощью команды import.
[БЕЗ_ЗВУКА] Я использую
стандартное сокращение pd, вы будете часто это встречать в коде.
Итак, основной структурой данных, которая позволяет нам работать с таблицами,
является Data Frame.
Data Frame можно представлять себе как такую двумерную матрицу или как dict-like
container для работы с Series.
Series — это обычный одномерный iii массив.
Он отличается от простого массива только тем, что в простом массиве у нас все
элементы проиндексированы от 0 до размера массива минус 1,
а тут у нас элементы могут иметь лейблы.
То есть это могут быть, в принципе, произвольные имена.
Итак, создадим нашу первую таблицу, или наш первый Data Frame.
Сделаем мы это с помощью словаря.
Пусть наш Data Frame состоит всего лишь из двух столбцов: первый столбец будет
числами, второй столбец будет каким-нибудь повторяющимся символом.
Теперь создаем наш словарь.
[БЕЗ_ЗВУКА]
[БЕЗ_ЗВУКА] Итак, мы сделали табличку,
теперь давайте выведем ее на экран и посмотрим, как она выглядит.
Итак, мы видим, что названия столбцов соответствуют
нашим ключам в словаре и значения соответствуют тому, чем мы их заполнили.
Довольно удобно.
На самом деле такой способ создания Data Frame будет использоваться не так часто,
потому что обычно мы хотим анализировать какие-то внешние данные, эти данные часто
хранятся в виде файлов или и в виде наборов файлов, поэтому нам удобнее будет
считывать эти данные в Data Frame и дальше работать с ними как с таблицами.
Давайте попробуем такое сделать.
Для этого есть функция read_csv.
Она позволяет нам считывать данные с каким-то стандартным разделителем и далее
работать с ними как с таблицей.
Создадим новый объект и считаем в него специально заготовленный файл.
[БЕЗ_ЗВУКА] В качестве первого аргумента передаем имя этого файла,
[БЕЗ_ЗВУКА] дальше нам нужно указать, есть ли в нашем файле заголовки.
В нашем файле они есть, они находятся в первой строчке, и дальше нужно написать,
какой разделитель у нас используется.
В данном случае мы используем табуляцию.
Итак, мы считали наш файл в таблицу, давайте на нее посмотрим.
[БЕЗ_ЗВУКА] Видим,
что получилась небольшая табличка.
Она состоит из шести строк и четырех столбцов.
Наши столбцы имеют имена, они перед вами в верхней строчке,
и строки опять проиндексированы.
Кстати, чтобы обратиться к именам столбцов или чтобы их поменять,
есть специальный атрибут, назвается columns.
Таким образом можно к нему обратиться, через точку.
И вот мы видим все наши имена столбцов.
Также довольно полезный атрибут — shape,
с помощью него можно посмотреть на размер нашей таблицы.
Сейчас табличка маленькая, мы и так представляем себе ее размеры,
а когда таблица довольно большая, то это полезно.
[БЕЗ_ЗВУКА] Итак,
мы научились создавать Data Frame, теперь давайте потренируемся их модифицировать.
Мы можем удалять и добавлять строчки, удалять и добавлять столбцы.
Давайте начнем с простого и добавим в конец нашего Data Frame новую строчку.
Строчку будем добавлять в виде словаря.
Это далеко не единственный способ добавления строки, но он довольно простой.
Для начала давайте создадим такой словарь.
Назовем его new_line, потому что он будет являться впоследствии новой линией в
нашем Data Frame, в нашей таблице.
Ну и давайте заполним какие-нибудь значения.
Допустим, заполним имя,
ну давайте еще заполним дату рождения,
ну вот можно еще заполнить город.
[БЕЗ_ЗВУКА] Итак, наш словарь готов,
теперь с помощью команды append нужно его добавить к нашему Data Frame.
Вызываем у фрейма метод append,
в качестве первого аргумента передаем наш словарь,
и еще указываем аргумент ignore_index = True,
потому что нам не так важно, под каким индексом добавится наша новая строчка.
Сделали команду, видим,
что в конце Data Frame добавилась новая шестая строка с тем, что мы заполнили.
Давайте еще раз выведем на печать наш Data Frame.
Видим, что здесь этих изменений нет.
Почему это произошло?
Потому что команда append на самом деле работает не inplace,
то есть она никак не изменяет наш исходный Data Frame.
Она вносит нужные изменения и возвращает нам его копию.
Если мы хотим, чтобы наш Data Frame изменился,
то нужно немножечко модифицировать нашу команду.
Опять же, как вариант, можно сделать вот так.
Тогда, если мы снова выведем на печать наш Data Frame, то увидим, что он изменился.
Действительно добавилась новая строчка.
Теперь давайте добавим новые столбцы.
Это делается довольно просто, потому что наш Data Frame можно представлять себе как
такой словарь series.
Если мы добавляем новый объект к словарю, то как мы делаем?
Просто указываем значение нового ключа и добавляем объект.
Вот давайте здесь поступим по аналогии.
Итак, пишем его
название и дальше более-менее случайно давайте его заполним.
[БЕЗ_ЗВУКА] Так, готово.
Выводим наш Data Frame на экран и видим,
что добавился новый столбец.
Так, с добавлением более-менее разобрались.
Теперь давайте что-нибудь удалим.
Сначала можно удалить некоторые строчки.
Вот давайте последние две строки удалим.
Для этого существует команда drop.
Сначала указываем, какие именно объекты мы удаляем.
Если мы удаляем строчки, то нам нужно указывать название индекса.
То есть название этой оси.
Ну вот смотрим: давайте удалим две последних строки, у них номера 5 и 6,
указываем, что эти номера мы указываем по оси 0, и запускаем.
Видим, что наш Data Frame стал на две строки короче.
Но у drop есть такая же особенность, как и у функции append.
Она тоже работает не inplace, поэтому если мы еще раз выведем на экран наш
Data Frame, то мы обнаружим, что все строчки на месте.
Чтобы это поправить, нужно в предыдущей команде добавить аргумент inplace=True,
если мы действительно хотим удалить эти строчки из исходного Data Frame.
Итак, запускаем и проверяем.
Действительно, строчки удалились.
Аналогично можно удалить столбцы.
Здесь нам снова понадобится функция drop.
Только в данном случае нам нужно будет обращаться уже не к индексам,
а к именам наших столбцов.
Давайте удалим тот столбец, который мы с вами недавно создали.
Обращаемся к нему по имени, только обратиться нужно правильно,
иначе ничего не получится, дальше указываем, что мы работаем с осью 1,
ну и давайте тоже сделаем это сразу inplace.
[БЕЗ_ЗВУКА] Так, готово.
Выводим наш Data Frame на экран, и видим,
что всё получилось: наш столбец пропал.
Часто после того как мы проделываем какие-то манипуляции с Data Frame,
например, чистим данные, добавляем новые столбцы,
вычисляем какие-то новые значения,
нам хочется сохранить результат в виде файла, чтобы в дальнейшем с ним работать.
Pandas позволяет нам сделать этого с помощью простого метода.
Он называется to_csv.
Давайте запишем наш новый получившийся Data Frame в файл.
Для этого вызываем эту функцию to_csv.
Давайте теперь аккуратненько заполним ее аргументы.
Для начала нужно написать название файла,
в который мы хотим сохранить наш Data Frame.
[БЕЗ_ЗВУКА] Давайте
придумаем какое-нибудь простое название: updated_dataset.
Дальше у нас есть очень много свободы в том,
как именно мы будем сохранять наш файл.
Например, можем выбрать другой сепаратор, не тот, который был изначально.
Вот давайте для разнообразия теперь укажем запятую.
Дальше мы можем решать, хотим ли мы оставить header в нашем файле.
Ну давайте оставим.
Напишем header=True, и то же самое можно сделать с индексами.
В данном случае индекс нам не очень полезен,
поэтому давайте записывать его не будем.
Напишем, что индекс нам не нужен.
Так, запускаем команду.
И теперь давайте убедимся, что наш файл выглядит именно так,
как мы ожидаем: наш Data Frame через запятую, с заголовком и без индекса.
Сделаем это с помощью команды cat.
Теперь нужно написать название нашего
файла: updated_
dataset.csv.
Где-то мы опечатались.
Так, ну вот так получше.
Видим, что действительно от первой строчки идут header'ы, дальше идет наша таблица,
все данные через запятую.
Ровно то, что мы хотели.
На этом мы заканчиваем наше первое знакомство с Pandas,
а на следующем видео мы продолжим говорить о Data Frame'ах.
Мы изучим еще несколько полезных функций и научимся работать с индексами.
Также мы будем делать выборки из таблиц.