Загрузил tateyouu

2-laboratornaya-rabota-bolshie-dannye

Лабораторная работа № 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