Замена одного или нескольких значений в столбце в dataframe pandas

Западайте NAN и сброс индекс

Проблема : Что происходит с индексами после сброса определенных рядов?

import pandas as pd

df = pd.read_csv("Cars.csv")

# Dataframe "df"
# ----------
#       make    fuel aspiration   body-style   price  engine-size
# 0     audi     gas      turbo        sedan   30000          2.0
# 1    dodge     gas        std        sedan   17000          1.8
# 2    mazda  diesel        std        sedan   17000          NaN
# 3  porsche     gas      turbo  convertible  120000          6.0
# 4    volvo  diesel        std        sedan   25000          2.0
# ----------

df.drop(, inplace=True)
df.reset_index(inplace=True)
result = df.index.to_list()
print(result)
# 

Метод На DataFrame удаляет строки или столбцы по индексу. Вы можете пройти одно значение или список значений.

По умолчанию Параметр установлен на Так что модификации не повлияют на исходный объект dataframe. Вместо этого метод возвращает модифицированную копию датафарама. В головоломке вы набор к Таким образом, делеции выполняются непосредственно на DataFrame.

После удаления первых трех строк первые два метки индекса являются 3 и 4. Вы можете сбросить индексацию по умолчанию, вызывая метод На DataFrame, чтобы индекс снова запускается в 0. Поскольку в DataFrame осталось только два ряда строк, результат – Отказ

Статистические методы в Pandas

Для того, чтобы из DataFrame отдельно извлечь статистические параметры в Pandas используются и другие методы:

Метод

Действие

.max()

Максимальное значение

.min()

Минимальное значение

.mean()

Среднее значение

.sum()

Сумма

.count()

Количество непустых значений

.std()

Стандартное отклонение

.median()

Медианное значение

.quantile()

Квантиль: в скобках указывается параметр: 0.25, 0.5 (то же, что и медиана) или 0.75

Давайте попробуем получить максимальную выручку. Для того, чтобы сделать это, необходимо применить метод .max() к столбцу “выручка”.

Если применить любой из этих статистических методов к конкретной колонке — в результате мы получим число, например, максимальное значение. А если ко всему датафрейму — получим объект типа Series.

Кстати, в каждый из статистических методов можно передать параметр, например, применить метод к строке (axis=0) или столбцу (axis=1) или определить, что делать вычисления нужно только по числовым столбцам или строкам (numeric_only=True).

Официальная документация по методам в pandas.

Сортировка фрейма данных по одному столбцу ↑

Для сортировки DataFrame по значениям в одном столбце используем . По умолчанию получим новый DataFrame, отсортированный в порядке возрастания. Исходный DataFrame не изменяется.

Сортировка по столбцу в порядке возрастания   

Для использования передадим один аргумент методу, содержащий имя столбца, по которому необходимо выполнить сортировку. В этом примере сортируем DataFrame по столбцу , который представляет город MPG для автомобилей, работающих только на топливе:

>>> df.sort_values("city08")
    city08  cylinders fuelType  ...  mpgData            trany  year
99       9          8  Premium  ...        N  Automatic 4-spd  1993
1        9         12  Regular  ...        N     Manual 5-spd  1985
80       9          8  Regular  ...        N  Automatic 3-spd  1985
47       9          8  Regular  ...        N  Automatic 3-spd  1985
3       10          8  Regular  ...        N  Automatic 3-spd  1985
..     ...        ...      ...  ...      ...              ...   ...
9       23          4  Regular  ...        Y  Automatic 4-spd  1993
8       23          4  Regular  ...        Y     Manual 5-spd  1993
7       23          4  Regular  ...        Y  Automatic 3-spd  1993
76      23          4  Regular  ...        Y     Manual 5-spd  1993
2       23          4  Regular  ...        Y     Manual 5-spd  1985

Сортирует DataFrame с использованием значений из столбца , показывая сначала автомобили с самым низким MPG. По умолчанию сортирует данные в порядке возрастания. Хотя имя аргумента, переданного в , не указано, фактически использован параметр , который увидим в следующем примере.

Изменение порядка сортировки   

Другой параметр — . По умолчанию имеет значение True, т.е. сортировка по возрастанию. Если вы хотите изменить порядок сортировки DataFrame на обратный, то можно передать значение этому параметру:

>>> df.sort_values(
...     by="city08",
...     ascending=False
... )
    city08  cylinders fuelType  ...  mpgData            trany  year
9       23          4  Regular  ...        Y  Automatic 4-spd  1993
2       23          4  Regular  ...        Y     Manual 5-spd  1985
7       23          4  Regular  ...        Y  Automatic 3-spd  1993
8       23          4  Regular  ...        Y     Manual 5-spd  1993
76      23          4  Regular  ...        Y     Manual 5-spd  1993
..     ...        ...      ...  ...      ...              ...   ...
58      10          8  Regular  ...        N  Automatic 3-spd  1985
80       9          8  Regular  ...        N  Automatic 3-spd  1985
1        9         12  Regular  ...        N     Manual 5-spd  1985
47       9          8  Regular  ...        N  Automatic 3-spd  1985
99       9          8  Premium  ...        N  Automatic 4-spd  1993

Передавая для , меняется порядок сортировки. Теперь DataFrame отсортирован в порядке убывания по средней MPG, измеренной в городских условиях. Транспортные средства с наибольшим значением MPG находятся в начале.

Выбор алгоритма сортировки   

>>> df.sort_values(
...     by="city08",
...     ascending=False,
...     kind="mergesort"
... )
    city08  cylinders fuelType  ...  mpgData            trany  year
2       23          4  Regular  ...        Y     Manual 5-spd  1985
7       23          4  Regular  ...        Y  Automatic 3-spd  1993
8       23          4  Regular  ...        Y     Manual 5-spd  1993
9       23          4  Regular  ...        Y  Automatic 4-spd  1993
10      23          4  Regular  ...        Y     Manual 5-spd  1993
..     ...        ...      ...  ...      ...              ...   ...
69      10          8  Regular  ...        N  Automatic 3-spd  1985
1        9         12  Regular  ...        N     Manual 5-spd  1985
47       9          8  Regular  ...        N  Automatic 3-spd  1985
80       9          8  Regular  ...        N  Automatic 3-spd  1985
99       9          8  Premium  ...        N  Automatic 4-spd  1993

Когда вы сортируете несколько записей с одним и тем же ключом, стабильный алгоритм сортировки сохранит исходный порядок этих записей после сортировки. По этой причине использование стабильного алгоритма сортировки необходимо, если вы планируете выполнять несколько сортировок.

Метод 1: использование astype()

DataFrame.astype() приводит этот DataFrame к указанному типу данных. Ниже приводится синтаксис метода.

astype(dtype, copy=True, errors='raise', **kwargs)

Нас интересует только первый аргумент dtype – это тип данных или dict имени столбца.

Итак, давайте использовать метод astype() с аргументом dtype, чтобы изменить тип данных одного или нескольких столбцов DataFrame.

Как изменить тип данных одного столбца?

Давайте сначала начнем с изменения типа данных только для одного столбца.

В следующей программе мы изменим тип данных столбца a на float.

import pandas as pd
import numpy as np

#initialize a dataframe
df = pd.DataFrame(
	,
	,
	,
	],
	columns=)

print('Previous Datatypes\n', df.dtypes, sep='') 

#change datatype of column
df = df.astype({'a': np.float})

#print results
print('\nNew Datatypes\n', df.dtypes, sep='') 
print('\nDataFrame\n', df, sep='')

Вывод:

Previous Datatypes
a    int64
b    int64
c    int64
dtype: object

New Datatypes
a    float64
b      int64
c      int64
dtype: object

DataFrame
      a   b   c
0  21.0  72  67
1  23.0  78  62
2  32.0  74  54
3  52.0  54  76

Как изменить тип данных нескольких столбцов?

Теперь давайте изменим тип данных более чем для одного столбца. Все, что нам нужно сделать, это предоставить больше пар column_name: datatype key:value в аргументе метода astype().

В следующей программе мы изменим тип данных столбца a на float, а b на int8.

import pandas as pd
import numpy as np

#initialize a dataframe
df = pd.DataFrame(
	,
	,
	,
	],
	columns=)

print('Previous Datatypes\n', df.dtypes, sep='') 

#change datatype of column
df = df.astype({'a': np.float, 'b': np.int8})

#print results
print('\nNew Datatypes\n', df.dtypes, sep='') 
print('\nDataFrame\n', df, sep='')

Вывод:

Previous Datatypes
a    int64
b    int64
c    int64
dtype: object

New Datatypes
a    float64
b       int8
c      int64
dtype: object

DataFrame
      a   b   c
0  21.0  72  67
1  23.0  78  62
2  32.0  74  54
3  52.0  54  76

Как изменить тип данных всех столбцов?

Если вы хотите изменить тип данных всех столбцов DataFrame, вы можете просто передать этот тип данных в качестве аргумента методу astype() без словаря.

В следующей программе мы изменим тип данных всех столбцов на float.

import pandas as pd
import numpy as np

#initialize a dataframe
df = pd.DataFrame(
	,
	,
	,
	],
	columns=)

print('Previous Datatypes\n', df.dtypes, sep='') 

#change datatype of column
df = df.astype(np.float)

#print results
print('\nNew Datatypes\n', df.dtypes, sep='') 
print('\nDataFrame\n', df, sep='')

Вывод:

Previous Datatypes
a    int64
b    int64
c    int64
dtype: object

New Datatypes
a    float64
b    float64
c    float64
dtype: object

DataFrame
      a     b     c
0  21.0  72.0  67.0
1  23.0  78.0  62.0
2  32.0  74.0  54.0
3  52.0  54.0  76.0

Создание новых признаков в Pandas

Сбор, подготовка и очистка данных — большая часть анализа. В реальных условиях от аналитика данных часто требуется не только привести данных в порядок, но и собрать дополнительную информацию, которая может быть полезной при исследованиях, например, выявлении закономерностей или аномалий.

Приведем практический пример: крупная компания, занимающаяся недвижимостью строит новый жилой комплекс. Для того, чтобы цена за жилье была оправданной, необходимо проанализировать много очевидно важных факторов: стоимость материалов, площадь квартир, вид отделки. Но есть и те факторы, которые влияют косвенно, например, инфраструктура, наличие школ и детских садов. Такие данные часто приходится собирать отдельно.

Представим, что дополнительные данные мы уже собрали, но хранятся они отдельно, да еще и в разных форматах. Существует много метода объединения данных, но сейчас мы поговорим только о том, как добавить новый признак или столбец уже имеющемуся датасету.

Создадим датафрейм с двумя колонками рандомных чисел:

Для того, чтобы создать новую колонку в dataframe, необходимо указать название датафрейма и название новой колонки в квадратных скобках и присвоить ей значение. Создадим новую колонку ‘fird_col’ с 10 случайными числами и добавим ее к dataframe:

Теперь датасет выглядит так:

Сортировка столбцов фрейма данных ↑

Кроме того, можно использовать метки столбцов DataFrame для сортировки значений в строках. Использование с необязательным параметром , установленной на 1, отсортирует DataFrame по меткам столбцов. Алгоритм сортировки применяется к меткам осей, а не к фактическим данным. Это может быть полезно для визуального осмотра DataFrame.

Работа с осью DataFrame   

Когда вы используете без явных аргументов, в качестве аргумента по умолчанию используется . Ось DataFrame относится либо к индексу (), либо к столбцам (). Вы можете использовать обе оси для индексации и выбора данных в DataFrame, а также для сортировки данных.

Использование меток столбцов для сортировки   

Вы также можете использовать метки столбцов DataFrame в качестве ключа сортировки для . Установка в 1 сортирует столбцы вашего DataFrame на основе меток столбцов:

>>> df.sort_index(axis=1)
    city08  cylinders fuelType  ...  mpgData            trany  year
0       19          4  Regular  ...        Y     Manual 5-spd  1985
1        9         12  Regular  ...        N     Manual 5-spd  1985
2       23          4  Regular  ...        Y     Manual 5-spd  1985
3       10          8  Regular  ...        N  Automatic 3-spd  1985
4       17          4  Premium  ...        N     Manual 5-spd  1993
..     ...        ...      ...  ...      ...              ...   ...
95      17          6  Regular  ...        Y  Automatic 3-spd  1993
96      17          6  Regular  ...        N  Automatic 4-spd  1993
97      15          6  Regular  ...        N  Automatic 4-spd  1993
98      15          6  Regular  ...        N     Manual 5-spd  1993
99       9          8  Premium  ...        N  Automatic 4-spd  1993

Столбцы вашего DataFrame сортируются слева направо в возрастающем алфавитном порядке. Если вы хотите отсортировать столбцы в порядке убывания, вы можете использовать :

>>> df.sort_index(axis=1, ascending=False)
    year            trany mpgData  ... fuelType cylinders  city08
0   1985     Manual 5-spd       Y  ...  Regular         4      19
1   1985     Manual 5-spd       N  ...  Regular        12       9
2   1985     Manual 5-spd       Y  ...  Regular         4      23
3   1985  Automatic 3-spd       N  ...  Regular         8      10
4   1993     Manual 5-spd       N  ...  Premium         4      17
..   ...              ...     ...  ...      ...       ...     ...
95  1993  Automatic 3-spd       Y  ...  Regular         6      17
96  1993  Automatic 4-spd       N  ...  Regular         6      17
97  1993  Automatic 4-spd       N  ...  Regular         6      15
98  1993     Manual 5-spd       N  ...  Regular         6      15
99  1993  Automatic 4-spd       N  ...  Premium         8       9

Используя в , вы отсортировали столбцы вашего DataFrame как по возрастанию, так и по убыванию. Это может быть более полезно в других наборах данных, например, в тех, в которых метки столбцов соответствуют месяцам в году. В этом случае имеет смысл расположить данные по месяцам в порядке возрастания или убывания.

Равен () против сравнения NAN

Проблема:

import pandas as pd

df = pd.read_csv("Cars.csv")

# Dataframe "df"
# ----------
#       make    fuel aspiration   body-style   price  engine-size
# 0     audi     gas      turbo        sedan   30000          2.0
# 1    dodge     gas        std        sedan   17000          1.8
# 2    mazda  diesel        std        sedan   17000          NaN
# 3  porsche     gas      turbo  convertible  120000          6.0
# 4    volvo  diesel        std        sedan   25000          2.0
# ----------

df = df
check1 = (df == df).all()
check2 = df.equals(df)
print(check1 == check2)
# False

Этот фрагмент кода показывает, как сравнивать столбцы или целые дата данных относительно формы и элементов.

Сравнение с использованием оператора Возвращает Для нашего датафарама, потому что сравнение -Валены с всегда дает Отказ

С другой стороны, позволяет сравнивать две серии или данных данных. В этом случае -Валены в том же месте считаются равными.

Заголовки столбцов не должны иметь один и тот же тип, но элементы внутри столбцов должны быть одинакового Отказ

С результата это и результат Урожайность Окончательный выход – Отказ

Перестановка

Операции перестановки (случайного изменения порядка) в объекте или строках можно выполнить с помощью функции .

Для этого примера создайте с числами в порядке возрастания.

Теперь создайте массив из пяти чисел от 0 до 4 в случайном порядке с функцией . Этот массив будет новым порядком, в котором потребуется разместить и значения строк из .

Теперь примените его ко всем строкам с помощью функции .

Как видите, порядок строк поменялся, а индексы соответствуют порядку в массиве .

Перестановку можно произвести и для отдельной части . Это сгенерирует массив с последовательностью, ограниченной конкретным диапазоном, например, от 2 до 4.

Дискретизация и биннинг

Более сложный процесс преобразования называется дискретизацией. Он используется для обработки большим объемов данных. Для анализа их необходимо разделять на дискретные категории, например, распределив диапазон значений на меньшие интервалы и посчитав статистику для каждого. Еще один пример — большое количество образцов. Даже здесь необходимо разделять весь диапазон по категориям и внутри них считать вхождения и статистику.

В следующем случае, например, нужно работать с экспериментальными значениями, лежащими в диапазоне от 0 до 100. Эти данные собраны в список.

Вы знаете, что все значения лежат в диапазоне от 0 до 100, а это значит, что их можно разделить на 4 одинаковых части, бины. В первом будут элементы от 0 до 25, во втором — от 26 до 50, в третьем — от 51 до 75, а в последнем — от 75 до 100.

Для этого в pandas сначала нужно определить массив со значениями разделения:

Затем используется специальная функция , которая применяется к массиву. В нее нужно добавить и бины.

Функция возвращает специальный объект типа . Его можно считать массивом строк с названиями бинов. Внутри каждая содержит массив , включающий названия разных внутренних категорий и массив со списком чисел, равных элементам . Число соответствует бину, которому был присвоен соответствующий элемент .

Чтобы узнать число вхождений каждого бина, то есть, результаты для всех категорий, нужно использовать функцию .

У каждого класса есть нижний предел с круглой скобкой и верхний — с квадратной. Такая запись соответствует математической, используемой для записи интервалов. Если скобка квадратная, то число лежит в диапазоне, а если круглая — то нет.

Бинам можно задавать имена, передав их в массив строк, а затем присвоив его параметру в функции , которая используется для создания объекта .

Если функции передать в качестве аргумента целое число, а не границы бина, то диапазон значений будет разделен на указанное количество интервалов.

Пределы будут основаны на минимуме и максимуме данных.

Также в pandas есть еще одна функция для биннинга, . Она делит весь набор на квантили. Так, в зависимости от имеющихся данных обеспечит разное количество данных для каждого бина. А позаботится о том, чтобы количество вхождений было одинаковым. Могут отличаться только границы.

В этом примере видно, что интервалы отличаются от тех, что получились в результате использования функции

Также можно обратить внимание на то, что попыталась стандартизировать вхождения для каждого бина, поэтому в первых двух больше вхождений. Это связано с тем, что количество объектов не делится на 5

Извлечение значений по условиям в Pandas

Иногда нам нужно получить не все данные из DataFrame, а только некоторые, удовлетворяющие каким-то условиям.

Разберем практический пример. У нас есть база сотрудников с информацией об их именах, возрасте и зарплате. Создадим dataframe:

Давайте выведем только тех сотрудников, чей возраст превышает 30 лет:

Вывод:

Итак, все просто: мы указываем DataFrame, к которому применяем условие, а само условие записывается в квадратных скобках. Подробнее об операторах сравнения.

В качестве условий можно также использовать статистические методы.

Давайте попробуем вывести имена тех сотрудников, чья зарплата выше среднего:

Изменение данных в DataFrame в Pandas

Кроме сбора дополнительных данных, как уже упоминалось, значительную часть времени занимает предобработка и очистка или разведывательный анализ данных.

Датасет представляет собой описание того, как условия жизни учеников, например, образование родителей, наличие отношений и интернета, влияют на их оценки по математике.

Мы не будем проводить целое исследование признаков, скорее рассмотрим как обработать данные: например, привести данные в колонке к одному формату или создать новый признак на основе имеющихся.

Обратимся к признаку “romantic”, который содержит текстовые данные: “yes”, если учащийся имеет романтические отношения и “no”, если нет.

Бывают случаи, например, в рамках машинного обучения, когда мы можем работать только с числовыми типами данных. Давайте попробуем преобразовать два возможных значения этой колонки в числа (по сути сделать признак бинарным): “1”, в случае наличия отношения и “0” — в обратном.

Есть два способа изменения значений колонки:

1. мы можем написать функцию. Этот способ оптимален в том случае, если нужно изменить данные в несколько шагов, сделать несколько операций или шагов, или применить сразу к нескольким колонкам;

можем воспользоваться lambda-функцией. С помощью нее можно выполнять простые преобразования данных, не создавая функции. Однако если одну и ту же функцию надо применить к нескольким колонкам, удобнее создать обычную функцию.

Рассмотрим первый вариант:

Применить функцию к конкретной колонке в Pandas позволяет метод .apply():

Обновить колонку датафрейма:

2. Второй вариант: изменение значений колонки с помощью lambda-функции в Pandas

В данном случае мы делаем простое преобразование, значит можно воспользоваться безымянной функцией — lambda. Синтаксис довольно простой:

С помощью функции lambda пройдемся по всем значениям (х) колонки, к которой она применена и вернем “1”, если значение (x) — “yes”, в противном случае вернем 0.

Итак, мы рассмотрели базовые манипуляции с данными при помощи библиотеки Pandas. 

Падение nan-ценностей

Проблема : Как отбросить все строки, которые содержат Нан Значение в любом из его столбцов – и как ограничить это определенным столбцам?

import pandas as pd

df = pd.read_csv("Cars.csv")

# Dataframe "df"
# ----------
#       make    fuel aspiration   body-style   price  engine-size
# 0     audi     gas      turbo        sedan   30000          2.0
# 1    dodge     gas        std        sedan   17000          1.8
# 2    mazda  diesel        std        sedan   17000          NaN
# 3  porsche     gas      turbo  convertible  120000          6.0
# 4    volvo  diesel        std        sedan   25000          2.0
# ----------

selection1 = df.dropna(subset=)
selection2 = df.dropna()
print(len(selection1), len(selection2))
# 5 4

DataFrame’s Способ удаляет все строки, которые содержат Значение в любом из его колонн. Но как ограничить столбцы, которые будут отсканированы для значения?

Передав список меток столбца в дополнительный параметр , вы можете определить, какие столбцы вы хотите рассмотреть.

Звонок Без ограничения, капли линии Из-за Значение в столбце Отказ Когда вы ограничиваете колонны только на , никакие ряды не будут сброшены, потому что нет Значение присутствует.

Стоит ли покупать БП 19 Сезона

Боевой Пропуск даёт крайне много бонусов активным игрокам — в нём и В-Баксы получить можно, и большой набор скинов. А если вдруг этого вам недостаточно, то вот полный список бонусов БП:

  • Обилие наград (за 950 В-Баксов вам даётся столько предметов, сколько невозможно купить в магазине за эти же 950 В-Баксов)
  • Эксклюзивность (награды, выдаваемые в БП, можно получить только в этом же БП)
  • Цена (БП стоит 950 В-Баксов, а получить из него можно даже больше, параллельно получая скины. А если у вас есть подписка, то себестоимость БП станет ещё меньше).
  • Больше испытаний и наград (некоторые испытания или награды открываются только для владельцев Боевого Пропуска)

Объекты Index

Зная, что такое и , и понимая как они устроены, проще разобраться со всеми их достоинствами. Главная особенность этих структур — наличие объекта , который в них интегрирован.

Объекты являются метками осей и содержат другие метаданные. Вы уже знаете, как массив с метками превращается в объект , и что для него нужно определить параметр в конструкторе.

В отличие от других элементов в структурах данных pandas ( и ) объекты — неизменяемые. Это обеспечивает безопасность, когда нужно передавать данные между разными структурами.

У каждого объекта есть методы и свойства, которые нужны, чтобы узнавать значения.

Методы Index

Есть методы для получения информации об индексах из структуры данных. Например, и — структуры, возвращающие индексы с самым маленьким и большим значениями.

Индекс с повторяющимися метками

Пока что были только те случаи, когда у индексов одной структуры лишь одна, уникальная метка. Для большинства функций это обязательное условие, но не для структур данных pandas.

Определим, например, с повторяющимися метками.

Если метке соответствует несколько значений, то она вернет не один элемент, а объект .

То же применимо и к . При повторяющихся индексах он возвращает .

В случае с маленькими структурами легко определять любые повторяющиеся индексы, но если структура большая, то растет и сложность этой операции. Для этого в pandas у объектов есть атрибут . Он сообщает, есть ли индексы с повторяющимися метками в структуре ( или ).

Прочие изменения

ГУЛАГЕсли вы выиграете ГУЛАГ в Warzone Pacific Season 1, вы сможете вернуться с оружием, полученным во время дуэли. По сути, любые боеприпасы или оставшееся оборудование переносятся между ГУЛАГом и передислокацией.

Маркеры выпадения снаряженияВам нужно будет купить маркеры сброса снаряжения на станциях покупки и только после того, как событие сброса снаряжения произойдет в матче после закрытия первого круга.

Изменения в противогазеПротивогазы больше не будут прерывать так много действий, как раньше, хотя вы по-прежнему будете в боевом невыгодном положении по сравнению с кем-то, стоящим в круге.

МелководьеОператоры смогут переходить мелководье вброд, что поможет скрыть шаги от тех, у кого есть перк Трекер. Приседание в воде также даст вам преимущество хладнокровного перка, хотя вы не сможете лечь ничком, если вас заметят.

Операции между структурами данных

Теперь когда вы знакомы со структурами данных, и , а также базовыми операциями для работы с ними, стоит рассмотреть операции, включающие две или более структур.

Гибкие арифметические методы

Уже рассмотренные операции можно выполнять с помощью гибких арифметических методов:

Для их вызова нужно использовать другую спецификацию. Например, вместо того чтобы выполнять операцию для двух объектов по примеру + , потребуется следующий формат:

ball mug paper pen pencil
blue 6.0 NaN NaN 6.0 NaN
green NaN NaN NaN NaN NaN
red NaN NaN NaN NaN NaN
white 20.0 NaN NaN 20.0 NaN
yellow 19.0 NaN NaN 19.0 NaN

Результат такой же, как при использовании оператора сложения

Также стоит обратить внимание, что если названия индексов и колонок сильно отличаются, то результатом станет новый объект , состоящий только из значений

Операции между Dataframe и Series

Pandas позволяет выполнять переносы между разными структурами, например, между и . Определить две структуры можно следующим образом.

ball pen pencil paper
red 1 2 3
blue 4 5 6 7
yellow 8 9 10 11
white 12 13 14 15

Они были специально созданы так, чтобы индексы в совпадали с названиями колонок в . В таком случае можно выполнить прямую операцию.

ball pen pencil paper
red
blue 4 4 4 4
yellow 8 8 8 8
white 12 12 12 12

По результату видно, что элементы были вычтены из соответствующих тому же индексу в колонках значений .

Если индекс не представлен ни в одной из структур, то появится новая колонка с этим индексом и значениями .

ball mug paper pen pencil
red NaN
blue 4 NaN 4 4 4
yellow 8 NaN 8 8 8
white 12 NaN 12 12 12

Работа с отсутствующими данными при сортировке в Pandas ↑

Часто данные реального мира имеют много недостатков. Хотя у pandas есть несколько методов, которые можно использовать для очистки данных перед сортировкой, иногда приятно увидеть, какие данные отсутствуют во время сортировки. Это можно сделать с помощью параметра .

Подмножество данных об экономии топлива, используемое в этом руководстве, не имеет пропущенных значений. Чтобы проиллюстрировать использование , сначала нужно создать некоторые недостающие данные. Следующий фрагмент кода создает новый столбец на основе существующего столбца , сопоставляя , где равно и , где это не так:

>>> df = df.map({"Y": True})
>>> df
    city08  cylinders fuelType  ...            trany  year mpgData_
0       19          4  Regular  ...     Manual 5-spd  1985     True
1        9         12  Regular  ...     Manual 5-spd  1985      NaN
2       23          4  Regular  ...     Manual 5-spd  1985     True
3       10          8  Regular  ...  Automatic 3-spd  1985      NaN
4       17          4  Premium  ...     Manual 5-spd  1993      NaN
..     ...        ...      ...  ...              ...   ...      ...
95      17          6  Regular  ...  Automatic 3-spd  1993     True
96      17          6  Regular  ...  Automatic 4-spd  1993      NaN
97      15          6  Regular  ...  Automatic 4-spd  1993      NaN
98      15          6  Regular  ...     Manual 5-spd  1993      NaN
99       9          8  Premium  ...  Automatic 4-spd  1993      NaN

Теперь у вас есть новый столбец с именем , который содержит значения и . В этом столбце вы увидите, какой эффект дает при использовании двух методов сортировки. Чтобы узнать больше об использовании , вы можете прочитать Pandas Project: Make Gradebook With Python & Pandas.

Значение параметра na_position в .sort_values()   

принимает параметр с именем , который помогает упорядочить недостающие данные в столбце, по которому выполняется сортировка. Если сортируется столбец с отсутствующими данными, то строки с отсутствующими значениями появятся в конце . Это происходит независимо от того, выполнятся ли сортировка по возрастанию или по убыванию.

Вот как выглядит DataFrame при сортировке по столбцу с отсутствующими данными:

>>> df.sort_values(by="mpgData_")
    city08  cylinders fuelType  ...            trany  year mpgData_
0       19          4  Regular  ...     Manual 5-spd  1985     True
55      18          6  Regular  ...  Automatic 4-spd  1993     True
56      18          6  Regular  ...  Automatic 4-spd  1993     True
57      16          6  Premium  ...     Manual 5-spd  1993     True
59      17          6  Regular  ...  Automatic 4-spd  1993     True
..     ...        ...      ...  ...              ...   ...      ...
94      18          6  Regular  ...  Automatic 4-spd  1993      NaN
96      17          6  Regular  ...  Automatic 4-spd  1993      NaN
97      15          6  Regular  ...  Automatic 4-spd  1993      NaN
98      15          6  Regular  ...     Manual 5-spd  1993      NaN
99       9          8  Premium  ...  Automatic 4-spd  1993      NaN

Чтобы изменить это поведение и чтобы недостающие данные сначала отображались в DataFrame, надо установить в значение . Параметр принимает только значения , которые являются значениями по умолчанию, или . Вот как использовать в :

>>> df.sort_values(
...     by="mpgData_",
...     na_position="first"
... )
    city08  cylinders fuelType  ...            trany  year mpgData_
1        9         12  Regular  ...     Manual 5-spd  1985      NaN
3       10          8  Regular  ...  Automatic 3-spd  1985      NaN
4       17          4  Premium  ...     Manual 5-spd  1993      NaN
5       21          4  Regular  ...  Automatic 3-spd  1993      NaN
11      18          4  Regular  ...  Automatic 4-spd  1993      NaN
..     ...        ...      ...  ...              ...   ...      ...
32      15          8  Premium  ...  Automatic 4-spd  1993     True
33      15          8  Premium  ...  Automatic 4-spd  1993     True
37      17          6  Regular  ...  Automatic 3-spd  1993     True
85      17          6  Regular  ...  Automatic 4-spd  1993     True
95      17          6  Regular  ...  Automatic 3-spd  1993     True

Теперь любые недостающие данные из столбцов, которые использовались для сортировки, будут отображаться в верхней части DataFrame. Это особенно полезно при начале анализа своих данные, когда нет уверенности в том, есть ли пропущенные значения.

Описание параметра na_position в .sort_index()   

также принимает . Обычно, DataFrame не имеет значений как часть индекса, поэтому этот параметр менее полезен в . Однако полезно знать, что если DataFrame действительно имеет в индексе строки или имени столбца, то можно быстро определить это с помощью и .

По умолчанию для этого параметра установлено значение , что помещает значения в конец отсортированного результата. Чтобы изменить это поведение и сначала сохранить недостающие данные в фрейме данных, установите для параметра значение .

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Все про сервера
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

Adblock
detector