Лабораторная работа № 2 Подготовка и очистка данных. Описательные характеристики. Цель работы: приобрести навыки подготовки и очистки данных средствами Python (pandas), вычисления статистических характеристик данных. Задания к лабораторной работе 1. Загрузить и изучить набор данных по варианту, изменить названия параметров на понятные на русском языке. Исследовать набор данных на предмет пропущенных/некорректных значений и типов данных. Устранить дубликаты строк, если таковые имеются. 2. Провести очистку данных: обработать отсутствующие значения (исключение / замена на статистическое значение); привести данные к виду, удобному для обработки (строковые в числовые или категориальные); заменить значения на подходящие по типу данных. Провести повторное исследование, аналогичное п.1. 3. Рассчитать статистические характеристики для числовых данных: минимальное, максимальное значения, математическое ожидание, выборочное стандартное отклонение, медиану, 25% и 75% квартили. 4. Рассчитать статистические характеристики для категориальных (классы) данных: количество уникальных значений, количество значений каждого вида, наиболее часто и наиболее редко встречающиеся классы. 5. Рассчитать коэффициенты корреляции параметрами. 6. Оформить отчет о проделанной работе. 1 между числовыми Оглавление Лабораторная работа № 2 ....................................................................................... 1 Индексные объекты и работа с индексами Series и DataFrame .................. 3 Основы взаимодействия с данными объектов Series и DataFrame ............ 4 Переиндексация ...................................................................................... 4 Доступ по индексу, выборка и фильтрация ......................................... 5 Удаление элементов................................................................................ 8 Добавление элементов ............................................................................ 9 Выборка с помощью loc и iloc ............................................................... 9 Арифметические операции и выравнивание данных ........................ 11 Применение функций и отображение ................................................. 12 Сортировка и ранжирование ................................................................ 13 Корреляция и ковариация .................................................................... 13 Уникальные значения, счётчики значений, проверка на вхождение ..................................................................................................................... 14 Очистка и подготовка данных ..................................................................... 16 Обработка отсутствующих значений .......................................................... 16 Фильтрация отсутствующих данных .................................................. 16 Восполнение отсутствующих данных ................................................ 18 Преобразование данных ............................................................................... 18 Устранение дубликатов ........................................................................ 18 Замена значений .................................................................................... 19 Строковые преобразования .................................................................. 19 Преобразование типов данных ............................................................ 20 2 Теоретические сведения Индексные объекты и работа с индексами Series и DataFrame В индексных объектах pandas хранятся метки вдоль осей и другие метаданные (например, имена осей). Любой массив или иная последовательность меток, указанная при конструировании Series или DataFrame, преобразуется в объект Index: In [76]: obj = Series(range(3), index=['a', 'b', 'c']) In [77]: index = obj.index In [78]: index Результат: Index([a, b, c], dtype=object) Индексные объекты неизменяемы, т.е. нельзя изменить номер или название одного из индексов. Можно заменить только лишь индекс целиком. При попытке выполнения следующего кода возникнет ошибка: index[1] = 'd' # ОШИБКА!!! Индексный объект похож на массив и может содержать повторяющиеся метки. Если при выборке указана повторяющаяся метка, то будут выбраны все элементы с такой меткой. У любого объекта индекс есть ряд свойств и методов работы с хранящимися в нём данными: Метод append diff intersection union isin delete drop Описание Конкатенирует с дополнительными индексными объектами, порождая новый объект Index Вычисляет теоретико-множественную разность, представляя ее в виде индексного объекта Вычисляет теоретико-множественное пересечение Вычисляет теоретико-множественное объединение Вычисляет булев массив, показывающий, содержится ли каждое значение индекса в переданной коллекции Вычисляет новый индексный объект, получающийся после удаления элемента с индексом i Вычисляет новый индексный объект, получающийся после удаления переданных значений 3 insert is_monotonic is_unique unique Вычисляет новый индексный объект, получающийся после вставки элемента в позицию Возвращает True, если каждый элемент больше предыдущего или равен ему Возвращает True, если в индексе нет повторяющихся значений Вычисляет массив уникальных значений в индексе Основы взаимодействия с данными объектов Series и DataFrame Переиндексация Для объектов pandas существует метод reindex, который позволяет реорганизовать данные в соответствии с новым индексом. Если ранее индекс отсутствовал, то данные по этому индексу будут заполнены NaN: frame = pd.DataFrame( np.arange(9).reshape((3, 3)), index=['d', 'c', 'a'], columns=['Ohio', 'Texas', 'California']) frame Результат: d c a Ohio 0 3 6 Texas 1 4 7 California 2 5 8 frame2 = frame.reindex(['a', 'b', 'c', 'd']) frame2 Результат: a b c d Ohio 6.0 NaN 3.0 0.0 Texas 7.0 NaN 4.0 1.0 California 8.0 NaN 5.0 2.0 Более подробно о методе reindex для DataFrame: https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.reindex.html 4 Можно вручную заменить все индексы, например, если они числовые и нумерация была искажена или просто необходимо перейти к числовым import pandas as pd import numpy as np frame = pd.DataFrame( np.arange(9).reshape((3, 3)), index=['d', 'c', 'a'], columns=['Ohio', 'Texas', 'California']) num_rows = len(frame.index) frame.index = np.arange(num_rows) frame Результат: 0 1 2 Ohio 0 3 6 Texas 1 4 7 California 2 5 8 Доступ по индексу, выборка и фильтрация Доступ по индексу к объекту Series работает также, как для массивов NumPy, с отличием, что индексами могут быть не только целые, но и любые значения из индекса объекта Series. obj = pd.Series(np.arange(4.), index=['a', 'b', 'c', 'd']) obj Результат: a 0.0 b 1.0 c 2.0 d 3.0 dtype: float64 Примеры выборки: Выбираемые данные Команда Результат 1.0 a 0.0 obj['b'] b 1.0 obj[1] c 2.0 d 3.0 a 0.0 obj[1:3] b 1.0 b 1.0 obj['b':'c'] c 2.0 dtype: float64 5 Выбираемые Команда данные Результат c 2.0 d 3.0 a 0.0 obj[2:4] c 2.0 b 1.0 obj[2:14] d 3.0 c 2.0 d 3.0 a 0.0 b dtype: float64 obj['b':'d'] b 1.0 1.0 c 2.0 c 2.0 d 3.0 d 3.0 a 0.0 obj[['b','a','d']] b 1.0 b 1.0 obj[[1,0,3]] a 0.0 c 2.0 d 3.0 d 3.0 a 0.0 b 1.0 c 2.0 d 3.0 dtype: float64 dtype: float64 obj[obj < 2] a 0.0 b 1.0 dtype: float64 Важно: вырезание с помощью меток (obj['b':'c']) отличается от обычного вырезания тем, что конечная точка включается Установка значений с помощью этих методов выборки модифицирует соответствующий участок Series obj['b':'c'] = 5 obj Результат: a b c d 0.0 5.0 5.0 3.0 6 dtype: float64 Обращение по индексу к DataFrame предназначено для получения одного или нескольких столбцов путём задания одного значения или последовательности: data = pd.DataFrame(np.arange(16).reshape((4, 4)), index=['Ohio', 'Colorado', 'Utah', 'New York'], columns=['one', 'two', 'three', 'four']) data Результат: One Ohio 0 Colorado 4 Utah 8 New York 12 two 1 5 9 13 three 2 6 10 14 Выбираемые данные four 3 7 11 15 Команда one two three four Указание Результат одного Ohio 1 Ohio 0 1 2 3 значения возвращает Colorado 5 Colorado 4 5 6 7 Series Utah 9 Utah 8 9 10 11 New York 12 13 14 15 one two three four New York 13 Name: two, dtype: int64 data['two'] Указание one three Ohio 0 1 2 3 нескольких Ohio 0 2 Colorado 4 5 6 7 значений Colorado 4 6 Utah 8 9 10 11 Utah 8 10 New York возвращает 12 13 14 15 New York 12 14 DataFrame data[['three', 'one']] one two three four Срез также one two three four Ohio 0 1 2 3 возвращает Colorado 4 5 6 7 Colorado 4 5 6 7 DataFrame Utah 8 9 10 11 Utah 8 9 10 11 7 New York 12 13 14 15 one two three four data[1:3] Выборка с помощью one two three four Ohio 0 1 2 3 булева массива Colorado 4 5 6 7 Colorado 4 5 6 7 data[data['three'] > 5] Utah 8 9 10 11 Utah 8 9 10 11 12 13 14 15 New York New York 12 13 14 15 Также существует возможность доступа к каждому элементу по индексу с помощью булева DataFrame, порождённого, например, в результате скалярного (поэлементного) сравнения: data < 5 Результат: Ohio Colorado Utah New York one True True False False two True False False False three True False False False four True False False False three 0 6 10 14 four 0 7 11 15 data[data < 5] = 0 data Результат: one Ohio 0 Colorado 0 Utah 8 New York 12 two 0 5 9 13 Удаление элементов Для удаления элементов используется метод drop, возвращающий новый объект, в котором указанные значения удалены из оси. В случае DataFrame удалять можно как строки, так и столбцы (параметр axis). Более подробно о методе drop для DataFrame: https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.drop.html Также, для удаления можно использовать присваивание объекту DataFrame фильтрованных значений: 8 data = pd.DataFrame(np.arange(16).reshape((4, 4)), index=['Ohio', 'Colorado', 'Utah', 'New York'], columns=['one', 'two', 'three', 'four']) data = data[data['three'] > 5] data Результат: One Colorado 4 Utah 8 New York 12 two 5 9 13 three 6 10 14 four 7 11 15 Добавление элементов Добавить столбец можно несколькими способами. Один из них – использование метода DataFrame.insert, который добавляет столбец в определённую позицию. Подробнее: https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.insert.html Также можно добавить столбец в DataFrame на последнюю позицию просто присвоив имени несуществующего столбца значения (см Ошибка! И сточник ссылки не найден.). Другой способ добавления столбцов (и строк) – использование метода DataFrame.concat, который позволяет объединить два объекта DataFrame как по оси индексов (добавление строк, параметр axis=0, по умолчанию), так и по оси колонок (добавление столбцов, axis=1). Множество возможных параметров и примеры можно посмотреть здесь: https://pandas.pydata.org/docs/reference/api/pandas.concat.html Выборка с помощью loc и iloc Для доступа к строкам по индексу с помощью меток существуют специальные индексные операторы loc и iloc. Они позволяют выбрать подмножество строк и столбцов DataFrame с применением нотации NumPy, используя либо метки строк (loc), либо целые числа (iloc). Варианты доступа по индексу для объекта DataFrame: 9 Вариант Описание df[val] Выбрать один столбец или последовательность столбцов из DataFrame. Частные случаи: булев массив (фильтрация строк), срез (вырезание строк) или булев DataFrame (установка значений в позициях, удовлетворяющих некоторому критерию) df.loc[val] Выбрать одну строку или подмножество строк из DataFrame по метке df.loc[:, val] Выбрать один столбец или подмножество столбцов по метке df.loc[val1, val2] Выбрать строки и столбцы по метке df.iloc[where] Выбрать одну строку или подмножество строк из DataFrame по целочисленной позиции df.iloc[:, where] Выбрать один столбец или подмножество столбцов по целочисленной позиции df.iloc[where_i, where_j] Выбрать строки и столбцы по целочисленной позиции df.at[label_i, label_j] Выбрать одно скалярное значение по меткам строки и столбца df.iat[label_i, label_j] Выбрать одно скалярное значение целочисленным позициям строки и столбца Более подробно про выборку указано здесь: https://pandas.pydata.org/docs/user_guide/dsintro.html#indexing-selection Про атрибуты loc и iloc указано здесь: https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.loc.html https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.iloc.html 10 по Арифметические операции и выравнивание данных При выполнении операции над объектами, которые содержат различные пары индексов, то результирующий объект будет объединять в себе записи с различными индексами. Пример: s1 = pd.Series([7.3, –2.5, 3.4, 1.5], index=['a', 'c', 'd', 'e']) s2 = pd.Series([–2.1, 3.6, –1.5, 4, 3.1], index=['a', 'c', 'e', 'f', 'g']) s1 + s2 Результат: a 5.2 c 1.1 d NaN e 0.0 f NaN g NaN dtype: float64 Вследствие отсутствующие внутреннего значения в выравнивания позициях, для данных которых образуются не нашлось соответственной пары. Отсутствующие значения распространяются на последующие операции. В случае DataFrame выравнивание производится как для строк, так и для столбцов: df1 = pd.DataFrame(np.arange(9.).reshape((3, 3)), columns=list('bcd'), index=['Ohio', 'Texas', 'Colorado']) df2 = pd.DataFrame(np.arange(12.).reshape((4, 3)), columns=list('bde'), index=['Utah', 'Ohio', 'Texas', 'Oregon']) df1 + df2 Результат: Colorado Ohio Oregon Texas Utah При b NaN 3.0 NaN 9.0 NaN c NaN NaN NaN NaN NaN выполнении проиндексированными d NaN 6.0 NaN 12.0 NaN e NaN NaN NaN NaN NaN арифметических по-разному, операций иногда с желательно объектами, поместить специальное значение, например 0, в позицию операнда, которым в другом операнде соответствует отсутствующая позиция. 11 Для выполнения арифметических операций со значениями в Series и DataFrame существуют специальные функции, которые дублируют арифметические операции и поддерживают заполнение отсутствующих значений: df1.add(df2, fill_value=0) Результат: Colorado Ohio Oregon Texas Utah b 0.0 3.0 0.0 9.0 0.0 c 0.0 0.0 0.0 0.0 0.0 d 0.0 6.0 0.0 12.0 0.0 e 0.0 0.0 0.0 0.0 0.0 Перечень арифметических методов Series и DataFrame: Метод Описание add, radd Сложение (+) sub, rsub Вычитание (-) div, rdiv Деление (/) floordiv, rfloordiv Деление с отсечением (//) mul, rmul Умножение (*) pow, rpow Возведение в степень (**) Описанные выше арифметические операции возможно проводить не только между объектами одного класса, но и между Series и DataFrame. Более подробно про функции указано здесь: https://pandas.pydata.org/docs/reference/frame.html#binary-operatorfunctions Применение функций и отображение Для применения функции, определённой для одномерных массивов, к каждому столбцу или строке существует метод apply объекта DataFrame. Применять можно как функцию, описанную с помощью def, так и лямбда функцию. Подробнее про метод apply здесь: 12 https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.apply.html Если же необходимо применить функцию к каждому элементу объекта DataFrame, то для этого существует метод applymap. Подробнее: https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.applymap.ht ml Сортировка и ранжирование Сортировка набора данных по некоторому критерию может производиться как по индексам, так и по значениям элементов Series или элементов одного или нескольких столбцов DataFrame. Для лексикографической сортировки по индексу служит метод sort_index, который возвращает новый упорядоченный объект. Для DataFrame возможно сортировать как индексы, так и колонки. Подробнее: https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.sort_index.ht ml Для сортировки Series по значениям служит метод sort_values. При этом отсутствующие значения по умолчанию оказываются в конце Series. Подробнее: https://pandas.pydata.org/docs/reference/api/pandas.Series.sort_values.html Объект DataFrame можно сортировать по значениям в одном или нескольких столбцах. Для этого имя столбца или список имён, если следует передать в качестве значения параметра by метода sort_values. Подробнее: https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.sort_values.ht ml Корреляция и ковариация Некоторые сводные статистики, например корреляция и ковариация, вычисляются по парам аргументов. 13 Метод corr объекта Series вычисляет корреляцию перекрывающихся, отличных от NA (not available), выровненных по индексу значений в двух объектах Series. Соответственно, метод cov вычисляет ковариацию. Подробнее: https://pandas.pydata.org/docs/reference/api/pandas.Series.corr.html https://pandas.pydata.org/docs/reference/api/pandas.Series.cov.html Методы corr и cov объекта DataFrame возвращают соответственно полную корреляционную или ковариационную матрицу в виде DataFrame. Подробнее: https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.corr.html https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.cov.html С помощью метода corrwith объекта DataFrame можно вычислить попарные корреляции между столбцами или строками DataFrame и другим объектом Series или DataFrame. Если передать ему объект Series, то будет возвращен Series, содержащий значения корреляции, вычисленные для каждого столбца. Подробнее: https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.corrwith.html Уникальные значения, счётчики значений, проверка на вхождение Некоторые методы позволяют получить информацию о конкретных значениях. Метод unique возвращает массив уникальных значений в Series. Уникальные значения необязательно возвращаются в отсортированном порядке, но могут быть отсортированы впоследствии, если это необходимо. Подробнее: https://pandas.pydata.org/docs/reference/api/pandas.Series.unique.html 14 Метод value_counts вычисляет объект Series, содержащий частоты встречаемости значений. Этот объект возвращается уже упорядоченным по значениям в порядке убывания. Подробнее: https://pandas.pydata.org/docs/reference/api/pandas.Series.value_counts.html Метод isin вычисляет булев вектор членства в множестве и может быть полезен для фильтрации набора данных относительно подмножества значений в объекте Series или столбце DataFrame. Подробнее: https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.isin.html Метод Index.get_indexer, который возвращает массив индексов, описывающий сопоставление между массивом потенциально повторяющихся значений и массивом, содержащим только различные значения: to_match = pd.Series(['c', 'a', 'b', 'b', 'c', 'a']) unique_vals = pd.Series(['c', 'b', 'a']) pd.Index(unique_vals).get_indexer(to_match) Результат: array([0, 2, 1, 1, 0, 2]) Подробнее: https://pandas.pydata.org/docs/reference/api/pandas.Index.get_indexer.html Метод info позволяет вывести обобщённую информацию об объекте DataFrame, которая включает количество индексов (строк) и столбцов, имена и типы данных каждого столбца, количество ненулевых значений в каждом столбце и другую информацию. Подробнее: https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.info.html 15 Очистка и подготовка данных Обработка отсутствующих значений Отсутствующие данные – типичное явление в большинстве аналитических приложений. В pandas для представления отсутствующих данных с плавающей точкой используется значение NaN (не число). Встроенное в Python значение None также рассматривается как отсутствующее в массивах объектов. В pandas существует много функций, относящихся к обработке отсутствующих данных. Некоторые из них: Метод Описание dropna Фильтрует метки оси в зависимости от того, существуют ли для метки отсутствующие данные, причем есть возможность указать различные пороги, определяющие, какое количество отсутствующих данных считать допустимым Восполняет отсутствующие данные указанным значением или использует какой-нибудь метод интерполяции, например 'ffill' или 'bfill' Возвращает объект, содержащий булевы значения, которые показывают, какие значения отсутствуют Логическое отрицание isnull fillna isnull notnull Фильтрация отсутствующих данных Существует несколько способов фильтрации отсутствующих данных. Можно сделать это вручную с помощью функции pandas.isnull и булева индексирования, но часто бывает полезен метод dropna. Для Series он возвращает другой объект Series, содержащий только данные и значения индекса, отличные от NA: from numpy import nan as NA data = Series([1, NA, 3.5, NA, 7]) data.dropna() Результат: 0 1.0 2 3.5 4 7.0 dtype: float64 Это эквивалентно такому коду: 16 data[data.notnull()] Результат: 0 1.0 2 3.5 4 7.0 dtype: float64 В случае объектов DataFrame больше настроек: можно отбрасывать строки или столбцы, если они содержат только NA-значения или хотя бы одно NA-значение. По умолчанию dropna отбрасывает все строки, содержащие хотя бы одно отсутствующее значение: data = DataFrame([[1., 6.5, 3.], [1., NA, NA], [NA, NA, NA], [NA, 6.5, 3.]]) data Результат: 0 1 2 3 0 1 1 NaN NaN 1 6.5 NaN NaN 6.5 2 3 NaN NaN 3 Очистка: cleaned = data.dropna() cleaned Результат: 0 0 1 2 1.0 6.5 3.0 Если установить параметр how='all', то будут отброшены строки, которые целиком состоят из отсутствующих значений. Для отбрасывания столбцов устанавливается параметр axis=1. Если требуется оставить только строки, содержащие определённое количество наблюдений, то порог можно задать с помощью thresh=k, где k – количество не NA-значений, которые должны быть в строке, чтобы она была оставлена. Подробнее про метод dropna: https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.dropna.html 17 Восполнение отсутствующих данных Для подстановки значений, вместо отсутствующих можно использовать метод fillna, который может заменять NA-значения на константу, константу в зависимости от столбца, интерполированные значения. Аргументы метода fillna: Аргумент Описание value Скалярное значение или похожий на словарь объект для восполнения отсутствующих значений Метод интерполяции. По умолчанию, если не задано других аргументов, предполагается метод 'ffill' Ось, по которой производится восполнение. По умолчанию axis=0 Модифицировать исходный объект, не создавая копию method axis inplace Для прямого и обратного восполнения максимальное количество непрерывных заполняемых промежутков Подробнее про метод fillna: limit https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.fillna.html Больше информации про работу с отсутствующими значениями можно получить здесь: https://pandas.pydata.org/docs/user_guide/missing_data.html Преобразование данных Устранение дубликатов Метод duplicated объекта DataFrame возвращает булев объект Series, который для каждой строки показывает, есть в ней дубликаты или нет. Метод drop_duplicates возвращает DataFrame, для которого массив, возвращённый методом duplicated, будет содержать только значения False. По умолчанию оба метода принимают во внимание все столбцы, но можно указать произвольное подмножество столбцов, которые необходимо исследовать на наличие дубликатов, передав список имён столбцов в качестве параметра. Подробнее про методы duplicated, duplicates: 18 https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.duplicated.ht ml https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.drop_duplicat es.html Замена значений Для замены значений вместо применения поэлементных функций apply и applymap можно применить метод replace. Подробнее: https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.replace.html Строковые преобразования При очистке данных для последующего анализа часто подразумевает значительный объём манипуляций со строками и использование регулярных выражений. Но возможные отсутствующие значения в данных приведут к ошибке, если работать со строковыми значениями, применяя соответствующие функции с помощью apply или applymap. Чтобы справиться с этой проблемой, в классе Series есть методы для операций со строками, которые пропускают отсутствующие значения. Доступ к ним производится через атрибут str. Некоторые векторные методы строковых объектов Метод cat contains count findall isnumeric join len lower, upper Описание Поэлементно конкатенирует строки с необязательным разделителем Возвращает булев массив, показывающий, содержит ли каждая строка указанный образец Подсчитывает количество вхождений образца Возвращает список всех вхождений образца для каждой строки Эквивалентно встроенному методу str.isnumeric Объединяет строки в каждом элементе Series, вставляя между ними указанный разделитель Вычисляет длину каждой строки Преобразование регистра; эквивалентно x.lower() или x.upper() для каждого элемента 19 match repeat replace split strip Вызывает re.match с указанным регулярным выражением для каждого элемента, возвращает список выделенных групп Дублирует значения; например, s.str.repeat(3) эквивалентно x * 3 для каждой строки Заменяет вхождения образца указанной строкой Разбивает строки по разделителю или по регулярному выражению Убирает пробельные символы, в том числе знак новой строки, с обеих сторон строки Подробнее о работе с текстовыми данными через атрибут str: https://pandas.pydata.org/docs/user_guide/text.html#string-methods Преобразование типов данных Для приведения данных к различным типам существует несколько способов. Наиболее часто необходимо приводить строковое представление числа к непосредственно числовому существует. Метод astype У объектов Series и DataFrame существует метод astype, который позволяет привести строковые значения к числовым. По умолчанию метод не игнорирует значения, которые не сможет преобразовать и вызывает исключение (параметр errors='raise'), которое останавливает дальнейшее выполнение. Можно указать параметр errors='ignore', в таком случае значение будет пропущено и исключение вызвано не будет. Но ошибочное значение так и останется необработанным. Подробнее: https://pandas.pydata.org/docs/reference/api/pandas.Series.astype.html Функция pandas.to_numeric Эта функция преобразует аргумент к числовому типу (целое или вещественное). Параметр errors имеет три аргумента: 'raise', 'ignore' и 'coerce'. Используя первые два, pandas.to_numeric работает аналогично методу astype. В свою очередь при параметре errors='coerce' производится замена значения, которые функция не смогла преобразовать, на значение NaN. 20 Подробнее: https://pandas.pydata.org/docs/reference/api/pandas.to_numeric.html Функцию pandas.to_numeric можно использовать для поиска значений, которые невозможно привести к числовому типу. Пример исходных данных и работа с ними: ages = ["--20", 21, "23.1", "37,3", "61..7", 41, 32] values = [18, 25, 35, 60, 100, "lala", 2] df = pd.DataFrame({"ages":ages, "values":values}) df Результат: 0 1 2 3 4 5 6 ages --20 21 23.1 37,3 61..7 41 32 values 18 25 35 60 100 lala 2 Приведения столбца ages к числовому виду, присвоив NaN некорректным значениям: df_col_ages = pd.to_numeric(df["ages"],errors="coerce",downcast="float") df_col_ages Результат: 0 NaN 1 21.0 2 23.1 3 NaN 4 NaN 5 41.0 6 32.0 Name: ages, dtype: float32 Для вывода строк исходного DataFrame, содержащих ошибочные данные используется булев массив: df[df_col_ages.isna()] Результат: 0 3 4 ages --20 37,3 61..7 values 18 60 100 21 Варианты заданий Наборы данных для обработки данных и по вариантам: 1. Автоматические данные о расходах на галлон. Файл «01 mpg crashed data.csv» содержит данные о расходе топлива в городской черте в милях на галлон. 2. Данные о доставке еды. Файл «02 Food Delivery crashed data.csv» содержит данные об исполненных заказах на доставку еды. 3. Данные о пользователях кредитных карт. Файл «03 application record crashed data.csv». Дополнительное описание полей по ссылке: https://www.kaggle.com/datasets/rikdifos/credit-card-approvalprediction/discussion/119320 4. Данные о пассажирских перевозках такси в файле «04 taxis crashed data.csv» 5. Данные о том, каково быть взрослым в файле «05 adult crashed data.csv» 6. Различные данных о счастье и коррупции, собранные с 2015 по 2022 года в файле «06 WorldHappiness_Corruption_2015_2020 crashed data.csv» 7. Данные о кредитах. Файл «7 Loan crashed data.csv». Дополнительное описание полей по ссылке: https://www.kaggle.com/datasets/mirzahasnine/loan-dataset/data?select=loan_train.csv 8. Данные о продажах смартфонов. Файл «08 Mobile Price Classification crashed data.csv». Дополнительное описание полей по ссылке: https://www.kaggle.com/datasets/iabhishekofficial/mobile-priceclassification/ 9. Данные о рейтингах, цене и тд книг по науке о данных на сайте Amazon в файле «09 Amazon Data Science Books Dataset crashed data.csv» 10. Данные о пассажирах Титаника в файле «10 Titanic-Dataset crashed data.csv». Некоторая информация о полях: 22 a. Pclass – класс билета: 1 = 1-й, 2 = 2-й, 3 = 3-й. b. SibSp – количество братьев и сестер(sibling)/супругов(spouses) на борту Титаника. c. Parch – количество родителей/детей на борту Титаника 23