0 added
0 removed
Original
2026-01-01
Modified
2026-02-21
1
<p><a>#статьи</a></p>
1
<p><a>#статьи</a></p>
2
<ul><li>29 фев 2024</li>
2
<ul><li>29 фев 2024</li>
3
<li>0</li>
3
<li>0</li>
4
</ul><p>Разбираемся в том, как работает библиотека Pandas, и проводим первый анализ данных.</p>
4
</ul><p>Разбираемся в том, как работает библиотека Pandas, и проводим первый анализ данных.</p>
5
<p>Иллюстрация: Катя Павловская для Skillbox Media</p>
5
<p>Иллюстрация: Катя Павловская для Skillbox Media</p>
6
<p>Изучает Python, его библиотеки и занимается анализом данных. Любит путешествовать в горах.</p>
6
<p>Изучает Python, его библиотеки и занимается анализом данных. Любит путешествовать в горах.</p>
7
<p>Python используют для анализа данных и машинного обучения, подключая к нему различные библиотеки: Pandas, Matplotlib,<a>NumPy</a>, TensorFlow и другие. Каждая из них используется для решения конкретных задач.</p>
7
<p>Python используют для анализа данных и машинного обучения, подключая к нему различные библиотеки: Pandas, Matplotlib,<a>NumPy</a>, TensorFlow и другие. Каждая из них используется для решения конкретных задач.</p>
8
<p>Сегодня мы поговорим про Pandas: узнаем, для чего нужна эта библиотека, как импортировать её в Python, а также проанализируем свой первый датасет и выясним, в каких странах самый быстрый и самый медленный интернет.</p>
8
<p>Сегодня мы поговорим про Pandas: узнаем, для чего нужна эта библиотека, как импортировать её в Python, а также проанализируем свой первый датасет и выясним, в каких странах самый быстрый и самый медленный интернет.</p>
9
<p>Pandas - главная библиотека в Python для работы с данными. Её активно используют аналитики данных и дата-сайентисты. Библиотека была создана в 2008 году компанией AQR Capital, а в 2009 году она стала<a>проектом с открытым исходным кодом</a>с поддержкой большого комьюнити.</p>
9
<p>Pandas - главная библиотека в Python для работы с данными. Её активно используют аналитики данных и дата-сайентисты. Библиотека была создана в 2008 году компанией AQR Capital, а в 2009 году она стала<a>проектом с открытым исходным кодом</a>с поддержкой большого комьюнити.</p>
10
<p>Вот для каких задач используют библиотеку.</p>
10
<p>Вот для каких задач используют библиотеку.</p>
11
<p><strong>Аналитика данных: продуктовая, маркетинговая и другая.</strong>Работа с любыми данными требует анализа и подготовки: необходимо удалить или заполнить пропуски, отфильтровать, отсортировать или каким-то образом изменить данные. Pandas в Python позволяет быстро выполнить все эти действия, а в большинстве случаев ещё и автоматизировать их.</p>
11
<p><strong>Аналитика данных: продуктовая, маркетинговая и другая.</strong>Работа с любыми данными требует анализа и подготовки: необходимо удалить или заполнить пропуски, отфильтровать, отсортировать или каким-то образом изменить данные. Pandas в Python позволяет быстро выполнить все эти действия, а в большинстве случаев ещё и автоматизировать их.</p>
12
<p><strong>Data science и работа с большими данными.</strong>Pandas помогает подготовить и провести первичный анализ данных, чтобы потом использовать их в машинном или глубоком обучении.</p>
12
<p><strong>Data science и работа с большими данными.</strong>Pandas помогает подготовить и провести первичный анализ данных, чтобы потом использовать их в машинном или глубоком обучении.</p>
13
<p><strong>Статистика.</strong>Библиотека поддерживает основные статистические методы, которые необходимы для работы с данными. Например, расчёт средних значений, их распределение по квантилям и другие.</p>
13
<p><strong>Статистика.</strong>Библиотека поддерживает основные статистические методы, которые необходимы для работы с данными. Например, расчёт средних значений, их распределение по квантилям и другие.</p>
14
<p>Для анализа данных и машинного обучения обычно используются особые инструменты:<a>Google Colab</a>или<a>Jupyter Notebook</a>. Это специализированные IDE, позволяющие работать с данными пошагово и итеративно, без необходимости создавать полноценное приложение.</p>
14
<p>Для анализа данных и машинного обучения обычно используются особые инструменты:<a>Google Colab</a>или<a>Jupyter Notebook</a>. Это специализированные IDE, позволяющие работать с данными пошагово и итеративно, без необходимости создавать полноценное приложение.</p>
15
<p>В этой статье мы посмотрим на Google Colab, облачное решение для работы с данными, которое можно запустить в браузере на любом устройстве: десктопе, ноутбуке, планшете или даже смартфоне.</p>
15
<p>В этой статье мы посмотрим на Google Colab, облачное решение для работы с данными, которое можно запустить в браузере на любом устройстве: десктопе, ноутбуке, планшете или даже смартфоне.</p>
16
<em>Скриншот: Pandas / Skillbox Media</em><p>Каждая строчка кода на скриншоте - это одно действие, результат которого Google Colab и Jupyter Notebook сразу демонстрируют пользователю. Это удобно в задачах, связанных с аналитикой и data science.</p>
16
<em>Скриншот: Pandas / Skillbox Media</em><p>Каждая строчка кода на скриншоте - это одно действие, результат которого Google Colab и Jupyter Notebook сразу демонстрируют пользователю. Это удобно в задачах, связанных с аналитикой и data science.</p>
17
<p>Устанавливать Pandas при работе с Jupyter Notebook или Google Colab не требуется. Это стандартная библиотека, которая будет доступна сразу после их запуска. Останется только импортировать её в ваш код.</p>
17
<p>Устанавливать Pandas при работе с Jupyter Notebook или Google Colab не требуется. Это стандартная библиотека, которая будет доступна сразу после их запуска. Останется только импортировать её в ваш код.</p>
18
import pandas as pd<p>pd - общепринятое сокращение для Pandas в коде. Оно встречается в книгах, статьях и учебных курсах. Используйте его и в своих программах, чтобы не писать длинное pandas.</p>
18
import pandas as pd<p>pd - общепринятое сокращение для Pandas в коде. Оно встречается в книгах, статьях и учебных курсах. Используйте его и в своих программах, чтобы не писать длинное pandas.</p>
19
<p>Данные в Pandas представлены в двух видах: Series и DataFrame. Разберёмся с каждым из них.</p>
19
<p>Данные в Pandas представлены в двух видах: Series и DataFrame. Разберёмся с каждым из них.</p>
20
<p><strong>Series</strong> - это объект, который похож на одномерный массив и может содержать любые типы данных. Проще всего представить его как столбец таблицы с последовательностью каких-либо значений, у каждого из которых есть индекс - номер строки.</p>
20
<p><strong>Series</strong> - это объект, который похож на одномерный массив и может содержать любые типы данных. Проще всего представить его как столбец таблицы с последовательностью каких-либо значений, у каждого из которых есть индекс - номер строки.</p>
21
<p>Создадим простой Series:</p>
21
<p>Создадим простой Series:</p>
22
import pandas as pd # Импортируем библиотеку Pandas. series_example = pd.Series([4, 7, -5, 3]) # Создаём объект Series, содержащий числа. series_example # Выводим объект на экран.<p>Теперь выведем его на экран:</p>
22
import pandas as pd # Импортируем библиотеку Pandas. series_example = pd.Series([4, 7, -5, 3]) # Создаём объект Series, содержащий числа. series_example # Выводим объект на экран.<p>Теперь выведем его на экран:</p>
23
<em>Скриншот: Pandas / Skillbox Media</em><p>Series отображается в виде таблицы с индексами элементов в первом столбце и значениями во втором.</p>
23
<em>Скриншот: Pandas / Skillbox Media</em><p>Series отображается в виде таблицы с индексами элементов в первом столбце и значениями во втором.</p>
24
<p><strong>DataFrame</strong> - основной тип данных в Pandas, вокруг которого строится вся работа. Его можно представить в виде обычной таблицы с любым количеством столбцов и строк. Внутри ячеек такой "таблицы" могут быть данные самого разного типа: числовые, булевы, строковые и так далее.</p>
24
<p><strong>DataFrame</strong> - основной тип данных в Pandas, вокруг которого строится вся работа. Его можно представить в виде обычной таблицы с любым количеством столбцов и строк. Внутри ячеек такой "таблицы" могут быть данные самого разного типа: числовые, булевы, строковые и так далее.</p>
25
<p>У DataFrame есть и индексы строк, и индексы столбцов. Это позволяет удобно сортировать и фильтровать данные, а также быстро находить нужные ячейки.</p>
25
<p>У DataFrame есть и индексы строк, и индексы столбцов. Это позволяет удобно сортировать и фильтровать данные, а также быстро находить нужные ячейки.</p>
26
<p>Создадим простой DataFrame с помощью словаря и посмотрим на его отображение:</p>
26
<p>Создадим простой DataFrame с помощью словаря и посмотрим на его отображение:</p>
27
import pandas as pd # Импортируем библиотеку Pandas. city = {'Город': ['Москва', 'Санкт-Петербург', 'Новосибирск', 'Екатеринбург'], 'Год основания': [1147, 1703, 1893, 1723], 'Население': [11.9, 4.9, 1.5, 1.4]} # Создаём словарь с нужной информацией о городах. df = pd.DataFrame(city) # Превращаем словарь в DataFrame, используя стандартный метод библиотеки. df # Выводим DataFrame на экран.<p>Посмотрим на результат:</p>
27
import pandas as pd # Импортируем библиотеку Pandas. city = {'Город': ['Москва', 'Санкт-Петербург', 'Новосибирск', 'Екатеринбург'], 'Год основания': [1147, 1703, 1893, 1723], 'Население': [11.9, 4.9, 1.5, 1.4]} # Создаём словарь с нужной информацией о городах. df = pd.DataFrame(city) # Превращаем словарь в DataFrame, используя стандартный метод библиотеки. df # Выводим DataFrame на экран.<p>Посмотрим на результат:</p>
28
<em>Скриншот: Pandas / Skillbox Media</em><p>Мы видим таблицу, строки которой имеют индексы от 0 до 3, а "индексы" столбцов соответствуют их названиям. Легко заметить, что датафрейм состоит из трёх Series: Город, Год основания и Население. Оба типа индексов можно использовать для навигации по данным.</p>
28
<em>Скриншот: Pandas / Skillbox Media</em><p>Мы видим таблицу, строки которой имеют индексы от 0 до 3, а "индексы" столбцов соответствуют их названиям. Легко заметить, что датафрейм состоит из трёх Series: Город, Год основания и Население. Оба типа индексов можно использовать для навигации по данным.</p>
29
<p>Pandas позволяет импортировать данные разными способами. Например, прочесть их из словаря, списка или кортежа. Самый популярный способ - это работа с файлами .csv, которые часто применяются в анализе данных. Для импорта используют команду pd.read_csv().</p>
29
<p>Pandas позволяет импортировать данные разными способами. Например, прочесть их из словаря, списка или кортежа. Самый популярный способ - это работа с файлами .csv, которые часто применяются в анализе данных. Для импорта используют команду pd.read_csv().</p>
30
<p>read_csv имеет несколько параметров для управления импортом:</p>
30
<p>read_csv имеет несколько параметров для управления импортом:</p>
31
<ul><li>sep позволяет явно указать разделитель, который используется в импортируемом файле. По умолчанию значение равно ,, что соответствует разделителю данных в файлах формата .csv. Этот параметр полезен при использовании нестандартных разделителей в исходном файле, например табуляции или точки с запятой;</li>
31
<ul><li>sep позволяет явно указать разделитель, который используется в импортируемом файле. По умолчанию значение равно ,, что соответствует разделителю данных в файлах формата .csv. Этот параметр полезен при использовании нестандартных разделителей в исходном файле, например табуляции или точки с запятой;</li>
32
<li>dtype позволяет указать тип данных в столбцах после загрузки файла формата .csv. Полезно в тех случаях, когда формат данных автоматически определился неверно. Например, даты часто импортируются в виде строковых переменных, хотя для них существует отдельный тип.</li>
32
<li>dtype позволяет указать тип данных в столбцах после загрузки файла формата .csv. Полезно в тех случаях, когда формат данных автоматически определился неверно. Например, даты часто импортируются в виде строковых переменных, хотя для них существует отдельный тип.</li>
33
</ul><p>Давайте импортируем датасет с информацией о скорости мобильного и стационарного интернета в отдельных странах. Готовый датасет<a>скачиваем с Kaggle</a>. Это файл в формате .csv. Параметры для read_csv не указываем, так как наши данные уже подготовлены для анализа.</p>
33
</ul><p>Давайте импортируем датасет с информацией о скорости мобильного и стационарного интернета в отдельных странах. Готовый датасет<a>скачиваем с Kaggle</a>. Это файл в формате .csv. Параметры для read_csv не указываем, так как наши данные уже подготовлены для анализа.</p>
34
df = pd.read_csv('/content/Internet Speed 2022.csv')<p>Теперь посмотрим на получившийся датафрейм:</p>
34
df = pd.read_csv('/content/Internet Speed 2022.csv')<p>Теперь посмотрим на получившийся датафрейм:</p>
35
df<p><strong>Важно!</strong></p>
35
df<p><strong>Важно!</strong></p>
36
<p>При работе в Google Colab или Jupyter Notebook для вывода DataFrame или Series на экран не используется команда print. Pandas умеет показывать данные и без неё. Если же написать print (df), то табличная вёрстка потеряется. Попробуйте вывести данные двумя способами и посмотрите на результат.</p>
36
<p>При работе в Google Colab или Jupyter Notebook для вывода DataFrame или Series на экран не используется команда print. Pandas умеет показывать данные и без неё. Если же написать print (df), то табличная вёрстка потеряется. Попробуйте вывести данные двумя способами и посмотрите на результат.</p>
37
<p>На экране появилась вот такая таблица:</p>
37
<p>На экране появилась вот такая таблица:</p>
38
<em>Скриншот: Pandas / Skillbox Media</em><p>В верхней части датафрейма мы видим названия столбцов: country (страна), broadband (средняя скорость интернета) и mobile (средняя скорость мобильного интернета). Слева указаны индексы - от 0 до 176. То есть всего у нас 177 строк. В нижней части таблицы Pandas отображает и эту информацию.</p>
38
<em>Скриншот: Pandas / Skillbox Media</em><p>В верхней части датафрейма мы видим названия столбцов: country (страна), broadband (средняя скорость интернета) и mobile (средняя скорость мобильного интернета). Слева указаны индексы - от 0 до 176. То есть всего у нас 177 строк. В нижней части таблицы Pandas отображает и эту информацию.</p>
39
<p>Выводить таблицу полностью не обязательно. Для знакомства с данными достаточно показать пять первых или пять последних строк. Сделать это можно с помощью df.head() или df.tail() соответственно. В скобках можно указать число строк, которое которые будут выведены. По умолчанию параметр равен 5.</p>
39
<p>Выводить таблицу полностью не обязательно. Для знакомства с данными достаточно показать пять первых или пять последних строк. Сделать это можно с помощью df.head() или df.tail() соответственно. В скобках можно указать число строк, которое которые будут выведены. По умолчанию параметр равен 5.</p>
40
df.head()<p>Результат:</p>
40
df.head()<p>Результат:</p>
41
<em>Скриншот: Pandas / Skillbox Media</em><p>Так намного удобнее. Мы можем сразу увидеть названия столбцов и тип данных в столбцах. Также в некоторых ячейках мы видим значение NaN - к нему мы вернёмся позже.</p>
41
<em>Скриншот: Pandas / Skillbox Media</em><p>Так намного удобнее. Мы можем сразу увидеть названия столбцов и тип данных в столбцах. Также в некоторых ячейках мы видим значение NaN - к нему мы вернёмся позже.</p>
42
<p>Теперь нам надо изучить импортированные данные. Действовать будем пошагово.</p>
42
<p>Теперь нам надо изучить импортированные данные. Действовать будем пошагово.</p>
43
<p><strong>Шаг 1. Проверяем тип данных в таблице.</strong>Это поможет понять, в каком виде представлена информация в датасете - а иногда и найти аномалии. Например, даты могут быть сохранены в виде строк, что неудобно для последующего анализа. Проверить это можно с помощью стандартного метода:</p>
43
<p><strong>Шаг 1. Проверяем тип данных в таблице.</strong>Это поможет понять, в каком виде представлена информация в датасете - а иногда и найти аномалии. Например, даты могут быть сохранены в виде строк, что неудобно для последующего анализа. Проверить это можно с помощью стандартного метода:</p>
44
df.dtypes<p>На экране появится таблица с обозначением типа данных в каждом столбце датафрейма:</p>
44
df.dtypes<p>На экране появится таблица с обозначением типа данных в каждом столбце датафрейма:</p>
45
<em>Скриншот: Pandas / Skillbox Media</em><p>Что мы видим:</p>
45
<em>Скриншот: Pandas / Skillbox Media</em><p>Что мы видим:</p>
46
<ul><li>столбец country представляет собой тип object. Это тип данных для строковых и смешанных значений;</li>
46
<ul><li>столбец country представляет собой тип object. Это тип данных для строковых и смешанных значений;</li>
47
<li>столбцы broadband и mobile имеют тип данных float, то есть относятся к числам с плавающей точкой.</li>
47
<li>столбцы broadband и mobile имеют тип данных float, то есть относятся к числам с плавающей точкой.</li>
48
</ul><p><strong>Шаг 2. Быстро оцениваем данные и делаем предварительные выводы.</strong>Сделать это можно очень просто: для этого в Pandas существует специальный метод describe(). Он показывает среднее со стандартным отклонением, максимальные, минимальные значения переменных и их разделение по квантилям.</p>
48
</ul><p><strong>Шаг 2. Быстро оцениваем данные и делаем предварительные выводы.</strong>Сделать это можно очень просто: для этого в Pandas существует специальный метод describe(). Он показывает среднее со стандартным отклонением, максимальные, минимальные значения переменных и их разделение по квантилям.</p>
49
<p>Посмотрим на этот метод в деле:</p>
49
<p>Посмотрим на этот метод в деле:</p>
50
df.describe()<p>Результат:</p>
50
df.describe()<p>Результат:</p>
51
<em>Скриншот: Pandas / Skillbox Media</em><p>Пройдёмся по каждой строчке:</p>
51
<em>Скриншот: Pandas / Skillbox Media</em><p>Пройдёмся по каждой строчке:</p>
52
<ul><li>count - это количество заполненных строк в каждом столбце. Мы видим, что в столбце с данными о скорости мобильного интернета есть пропуски.</li>
52
<ul><li>count - это количество заполненных строк в каждом столбце. Мы видим, что в столбце с данными о скорости мобильного интернета есть пропуски.</li>
53
<li>mean - среднее значение скорости обычного и мобильного интернета. Уже можно сделать вывод, что мобильный интернет в большинстве стран медленнее, чем кабельный.</li>
53
<li>mean - среднее значение скорости обычного и мобильного интернета. Уже можно сделать вывод, что мобильный интернет в большинстве стран медленнее, чем кабельный.</li>
54
<li>std - стандартное отклонение. Важный статистический показатель, показывающий разброс значений.</li>
54
<li>std - стандартное отклонение. Важный статистический показатель, показывающий разброс значений.</li>
55
<li>min и max - минимальное и максимальное значения.</li>
55
<li>min и max - минимальное и максимальное значения.</li>
56
<li>25%, 50% и 75% - значения скорости интернета по процентилям. Если не углубляться в статистику, то процентиль - это число, которое показывает распределение значений в выборке. Например, в выборке с мобильным интернетом 25-й процентиль показывает, что 25% от всех значений скорости интернета меньше, чем 24,4.</li>
56
<li>25%, 50% и 75% - значения скорости интернета по процентилям. Если не углубляться в статистику, то процентиль - это число, которое показывает распределение значений в выборке. Например, в выборке с мобильным интернетом 25-й процентиль показывает, что 25% от всех значений скорости интернета меньше, чем 24,4.</li>
57
</ul><p>Обратите внимание, что этот метод работает только для чисел. Информация для столбца с названием стран отсутствует.</p>
57
</ul><p>Обратите внимание, что этот метод работает только для чисел. Информация для столбца с названием стран отсутствует.</p>
58
<p>Какой вывод делаем? Проводной интернет в большинстве стран работает быстрее, чем мобильный. При этом скорость проводного интернета в 75% случаев не превышает 110 Мбит/с, а мобильного - 69 Мбит/сек.</p>
58
<p>Какой вывод делаем? Проводной интернет в большинстве стран работает быстрее, чем мобильный. При этом скорость проводного интернета в 75% случаев не превышает 110 Мбит/с, а мобильного - 69 Мбит/сек.</p>
59
<p><strong>Шаг 3. Сортируем и фильтруем записи.</strong>В нашем датафрейме данные уже отсортированы от большего к меньшему по скорости проводного интернета. Попробуем найти страну с наилучшим мобильным интернетом. Для этого используем стандартный метод sort_values, который принимает два параметра:</p>
59
<p><strong>Шаг 3. Сортируем и фильтруем записи.</strong>В нашем датафрейме данные уже отсортированы от большего к меньшему по скорости проводного интернета. Попробуем найти страну с наилучшим мобильным интернетом. Для этого используем стандартный метод sort_values, который принимает два параметра:</p>
60
<ul><li>Название столбца, по которому происходит сортировка, обязательно должно быть заключено в одинарные или двойные кавычки.</li>
60
<ul><li>Название столбца, по которому происходит сортировка, обязательно должно быть заключено в одинарные или двойные кавычки.</li>
61
<li>Параметр ascending= указывает на тип сортировки. Если мы хотим отсортировать значения от большего к меньшему, то параметру присваиваем False. Для сортировки от меньшего к большему используем True.</li>
61
<li>Параметр ascending= указывает на тип сортировки. Если мы хотим отсортировать значения от большего к меньшему, то параметру присваиваем False. Для сортировки от меньшего к большему используем True.</li>
62
</ul><p>Перейдём к коду:</p>
62
</ul><p>Перейдём к коду:</p>
63
df.sort_values('mobile', ascending=False).head()<p>Результат:</p>
63
df.sort_values('mobile', ascending=False).head()<p>Результат:</p>
64
<em>Скриншот: Pandas / Skillbox Media</em><p>Теперь рейтинг стран другой - пятёрка лидеров поменялась (потому что мы отсортировали данные по другому значению). Мы выяснили, что самый быстрый мобильный интернет в ОАЭ.</p>
64
<em>Скриншот: Pandas / Skillbox Media</em><p>Теперь рейтинг стран другой - пятёрка лидеров поменялась (потому что мы отсортировали данные по другому значению). Мы выяснили, что самый быстрый мобильный интернет в ОАЭ.</p>
65
<p>Но есть нюанс. Если вернуться к первоначальной таблице, отсортированной по скорости проводного интернета, можно заметить, что у лидера - Монако - во втором столбце написано NaN.</p>
65
<p>Но есть нюанс. Если вернуться к первоначальной таблице, отсортированной по скорости проводного интернета, можно заметить, что у лидера - Монако - во втором столбце написано NaN.</p>
66
<p>NaN в Python указывает на отсутствие данных. Поэтому мы не знаем скорость мобильного интернета в Монако из этого датасета и не можем сделать однозначный вывод о лидерах в мире мобильной связи.</p>
66
<p>NaN в Python указывает на отсутствие данных. Поэтому мы не знаем скорость мобильного интернета в Монако из этого датасета и не можем сделать однозначный вывод о лидерах в мире мобильной связи.</p>
67
<p>Попробуем отфильтровать значения, убрав из датафрейма страны с неизвестной скоростью мобильного интернета, и посмотрим на худшие по показателю страны (если оставить NaN, он будет засорять "дно" таблицы и увидеть реальные значения по самому медленному мобильному интернету будет сложновато).</p>
67
<p>Попробуем отфильтровать значения, убрав из датафрейма страны с неизвестной скоростью мобильного интернета, и посмотрим на худшие по показателю страны (если оставить NaN, он будет засорять "дно" таблицы и увидеть реальные значения по самому медленному мобильному интернету будет сложновато).</p>
68
<p>В Pandas существуют различные способы фильтрации для удаления NaN. Мы воспользуемся методом dropna(), который удаляет все строки с пропусками. Важно, что удаляется полностью строка, содержащая NaN, а не только ячейки с пропущенными значениями в столбце с пропусками.</p>
68
<p>В Pandas существуют различные способы фильтрации для удаления NaN. Мы воспользуемся методом dropna(), который удаляет все строки с пропусками. Важно, что удаляется полностью строка, содержащая NaN, а не только ячейки с пропущенными значениями в столбце с пропусками.</p>
69
df.dropna()<p>Результат:</p>
69
df.dropna()<p>Результат:</p>
70
<em>Скриншот: Pandas / Skillbox Media</em><p>Количество строк в датафрейме при удалении пустых данных уменьшилось до 136. Если вернуться ко второму шагу, то можно увидеть, что это соответствует количеству заполненных строк в столбце mobile в начальном датафрейме.</p>
70
<em>Скриншот: Pandas / Skillbox Media</em><p>Количество строк в датафрейме при удалении пустых данных уменьшилось до 136. Если вернуться ко второму шагу, то можно увидеть, что это соответствует количеству заполненных строк в столбце mobile в начальном датафрейме.</p>
71
<p>Сохраним результат в новый датафрейм и назовём его df_without_nan. Изначальный DataFrame стараемся не менять, так как он ещё может нам понадобиться.</p>
71
<p>Сохраним результат в новый датафрейм и назовём его df_without_nan. Изначальный DataFrame стараемся не менять, так как он ещё может нам понадобиться.</p>
72
df_without_nan = df.dropna()<p>Теперь отсортируем полученные результаты по столбцу mobile - от меньшего к большему - и посмотрим на страну с самым медленным мобильным интернетом:</p>
72
df_without_nan = df.dropna()<p>Теперь отсортируем полученные результаты по столбцу mobile - от меньшего к большему - и посмотрим на страну с самым медленным мобильным интернетом:</p>
73
df_without_nan.sort_values('mobile', ascending=True)<p>Результат:</p>
73
df_without_nan.sort_values('mobile', ascending=True)<p>Результат:</p>
74
<em>Скриншот: Pandas / Skillbox Media</em><p>Худший мобильный интернет в Афганистане, далее с небольшим отставанием идут Палестина и Венесуэла.</p>
74
<em>Скриншот: Pandas / Skillbox Media</em><p>Худший мобильный интернет в Афганистане, далее с небольшим отставанием идут Палестина и Венесуэла.</p>
75
<p>Кроме как работать с существующим датафреймом, мы можем менять готовый датафрейм в зависимости от своих задач: добавлять новые строки, удалять существующие, агрегировать данные и так далее.</p>
75
<p>Кроме как работать с существующим датафреймом, мы можем менять готовый датафрейм в зависимости от своих задач: добавлять новые строки, удалять существующие, агрегировать данные и так далее.</p>
76
<p>Вернём нашему df первоначальный вид. Загрузим csv с датасетом повторно:</p>
76
<p>Вернём нашему df первоначальный вид. Загрузим csv с датасетом повторно:</p>
77
df = pd.read_csv('/content/Internet Speed 2022.csv')<p>Посмотрим на датафрейм:</p>
77
df = pd.read_csv('/content/Internet Speed 2022.csv')<p>Посмотрим на датафрейм:</p>
78
df<p>Убедимся, что все данные на месте:</p>
78
df<p>Убедимся, что все данные на месте:</p>
79
<em>Скриншот: Pandas / Skillbox Media</em><p>177 строк - все страны, в том числе те, данные о скорости интернета которых отсутствуют, в списке есть.</p>
79
<em>Скриншот: Pandas / Skillbox Media</em><p>177 строк - все страны, в том числе те, данные о скорости интернета которых отсутствуют, в списке есть.</p>
80
<p>Добавим в наш датафрейм новую страну. Так как в списке их уже 177, пусть это будет Галактическая Республика из "Звёздных войн".</p>
80
<p>Добавим в наш датафрейм новую страну. Так как в списке их уже 177, пусть это будет Галактическая Республика из "Звёздных войн".</p>
81
<p>Для добавления информации в датафрейм используется метод concat:</p>
81
<p>Для добавления информации в датафрейм используется метод concat:</p>
82
new_country = {'country': 'Галактическая Республика', 'broadband': 1342, 'mobile': 295.45} df1 = pd.DataFrame([new_country]) new_list1 = pd.concat([df1,df], ignore_index=True)<p>Разберём код построчно:</p>
82
new_country = {'country': 'Галактическая Республика', 'broadband': 1342, 'mobile': 295.45} df1 = pd.DataFrame([new_country]) new_list1 = pd.concat([df1,df], ignore_index=True)<p>Разберём код построчно:</p>
83
<ul><li>Сначала мы создаём словарь, который будет содержать название страны, информацию о средней скорости интернета и средней скорости мобильного интернета.</li>
83
<ul><li>Сначала мы создаём словарь, который будет содержать название страны, информацию о средней скорости интернета и средней скорости мобильного интернета.</li>
84
<li>В конструкторе pd.DataFrame конвертируем словарь в датафрейм.</li>
84
<li>В конструкторе pd.DataFrame конвертируем словарь в датафрейм.</li>
85
<li>С помощью метода concat объединяем изначальный датафрейм с новым в new_list. Не забываем указать ignore_index=True, чтобы новая строка появилась первой.</li>
85
<li>С помощью метода concat объединяем изначальный датафрейм с новым в new_list. Не забываем указать ignore_index=True, чтобы новая строка появилась первой.</li>
86
</ul><p>Проверим результат:</p>
86
</ul><p>Проверим результат:</p>
87
<em>Скриншот: Pandas / Skillbox Media</em><p>Всё получилось. Галактическая Республика в нашей таблице.</p>
87
<em>Скриншот: Pandas / Skillbox Media</em><p>Всё получилось. Галактическая Республика в нашей таблице.</p>
88
<p>Строки в Pandas удаляются методом drop. Давайте теперь с его помощью удалим несуществующую страну, которую мы добавили ранее в наш датафрейм:</p>
88
<p>Строки в Pandas удаляются методом drop. Давайте теперь с его помощью удалим несуществующую страну, которую мы добавили ранее в наш датафрейм:</p>
89
new_list1.drop(0, inplace=True)<p>В метод передаётся два параметра:</p>
89
new_list1.drop(0, inplace=True)<p>В метод передаётся два параметра:</p>
90
<ul><li>Индекс строк, которые необходимо удалить, - в нашем случае это строка с индексом 0. Чтобы удалить несколько строк, нужно передать индексы списком. Например, [0, 1, 2].</li>
90
<ul><li>Индекс строк, которые необходимо удалить, - в нашем случае это строка с индексом 0. Чтобы удалить несколько строк, нужно передать индексы списком. Например, [0, 1, 2].</li>
91
<li>inplace=True - обнуляет индексы, чтобы у первой строки после удаления он стал равен 0.</li>
91
<li>inplace=True - обнуляет индексы, чтобы у первой строки после удаления он стал равен 0.</li>
92
</ul><p>Запустим код и выведем датафрейм:</p>
92
</ul><p>Запустим код и выведем датафрейм:</p>
93
<em>Скриншот: Pandas / Skillbox Media</em><p>Галактической Республики больше нет. Датафрейм вернулся в изначальный вид.</p>
93
<em>Скриншот: Pandas / Skillbox Media</em><p>Галактической Республики больше нет. Датафрейм вернулся в изначальный вид.</p>
94
<p>Иногда в датафрейме нужно найти определённую строку. Сделать это можно двумя способами: по индексному значению и индексу. Попробуем оба метода.</p>
94
<p>Иногда в датафрейме нужно найти определённую строку. Сделать это можно двумя способами: по индексному значению и индексу. Попробуем оба метода.</p>
95
<p><strong>Фильтрация по индексному значению.</strong>Оно соответствует первому столбцу в датафрейме. В нашем случае индексные значения - это числа от 0 до 177.</p>
95
<p><strong>Фильтрация по индексному значению.</strong>Оно соответствует первому столбцу в датафрейме. В нашем случае индексные значения - это числа от 0 до 177.</p>
96
<p>Выведем на экран страны с индексными значениями 10 и 11:</p>
96
<p>Выведем на экран страны с индексными значениями 10 и 11:</p>
97
new_list1.loc[[10,11]]<p>Смотрим на результат:</p>
97
new_list1.loc[[10,11]]<p>Смотрим на результат:</p>
98
<em>Скриншот: Pandas / Skillbox Media</em><p><strong>Фильтрация по индексу.</strong>Он в датафрейме всегда начинается с 0. Сделаем срез стран с индексами 5-8. Для этого используется метод iloc.</p>
98
<em>Скриншот: Pandas / Skillbox Media</em><p><strong>Фильтрация по индексу.</strong>Он в датафрейме всегда начинается с 0. Сделаем срез стран с индексами 5-8. Для этого используется метод iloc.</p>
99
new_list1.iloc[5:8]<p>Смотрим на результат:</p>
99
new_list1.iloc[5:8]<p>Смотрим на результат:</p>
100
<em>Скриншот: Pandas / Skillbox Media</em><p>Получили срез списка с 6-го по 8-й объект. Обратите внимание, что индекс и индексные значения строк различаются.</p>
100
<em>Скриншот: Pandas / Skillbox Media</em><p>Получили срез списка с 6-го по 8-й объект. Обратите внимание, что индекс и индексные значения строк различаются.</p>
101
<p>Выведем на экран только те страны, где скорость мобильного интернета более 100 Мбит/с:</p>
101
<p>Выведем на экран только те страны, где скорость мобильного интернета более 100 Мбит/с:</p>
102
new_list1[new_list1['mobile'] > 100]<p>В результате получили таблицу с 18 странами:</p>
102
new_list1[new_list1['mobile'] > 100]<p>В результате получили таблицу с 18 странами:</p>
103
<em>Скриншот: Pandas / Skillbox Media</em><p><strong>Важно!</strong></p>
103
<em>Скриншот: Pandas / Skillbox Media</em><p><strong>Важно!</strong></p>
104
<p>При использовании этого метода сохраняются индексные значения анализируемого датафрейма.</p>
104
<p>При использовании этого метода сохраняются индексные значения анализируемого датафрейма.</p>
105
<p>Агрегирование данных - это функция, которая принимает несколько отдельных значений и возвращает сводные данные.</p>
105
<p>Агрегирование данных - это функция, которая принимает несколько отдельных значений и возвращает сводные данные.</p>
106
<p>Рассчитаем среднее значение скорости интернета для всех стран с помощью функции agg, передав туда поле mean:</p>
106
<p>Рассчитаем среднее значение скорости интернета для всех стран с помощью функции agg, передав туда поле mean:</p>
107
new_list1['broadband'].agg(['mean'])<p>Результат:</p>
107
new_list1['broadband'].agg(['mean'])<p>Результат:</p>
108
<em>Скриншот: Pandas / Skillbox Media</em><p>Среднее значение скорости интернета по всем странам - 72,67.</p>
108
<em>Скриншот: Pandas / Skillbox Media</em><p>Среднее значение скорости интернета по всем странам - 72,67.</p>
109
<p>После завершения редактирования датафрейма его можно сохранить в CSV или другом формате:</p>
109
<p>После завершения редактирования датафрейма его можно сохранить в CSV или другом формате:</p>
110
new_list1.to_csv (r' C:\Users\Skillbox\Desktop\country.csv')<p>Сохранённый файл появится по указанному пути.</p>
110
new_list1.to_csv (r' C:\Users\Skillbox\Desktop\country.csv')<p>Сохранённый файл появится по указанному пути.</p>
111
<p>Data Science с нуля: пробуем профессии на практике за 5 дней</p>
111
<p>Data Science с нуля: пробуем профессии на практике за 5 дней</p>
112
<p>Вы разберётесь в трёх главных направлениях data science: машинном обучении, разработке на Python и визуализации данных. Решите, какая сфера вам ближе, и выполните 4 реальные задачи с данными.</p>
112
<p>Вы разберётесь в трёх главных направлениях data science: машинном обучении, разработке на Python и визуализации данных. Решите, какая сфера вам ближе, и выполните 4 реальные задачи с данными.</p>
113
<p><a>Пройти бесплатно</a></p>
113
<p><a>Пройти бесплатно</a></p>
114
<a><b>Попробуйте data science на бесплатном курсе</b>Пройдите курс по data science и изучите 3 направления в работе с данными. Решите, в какой сфере хотите развиваться дальше, и получите ценные подарки. Пройти курс →</a>
114
<a><b>Попробуйте data science на бесплатном курсе</b>Пройдите курс по data science и изучите 3 направления в работе с данными. Решите, в какой сфере хотите развиваться дальше, и получите ценные подарки. Пройти курс →</a>