Pandas – это Excel на стероидах – мощная библиотека Python позволяет анализировать структурированные и табличные данные с удивительной эффективностью и легкостью. Пандас является одной из причин, почему мастер-кодеры достигают 100x эффективность средних кодеров. В сегодняшней статье вы узнаете, как работать с отсутствующими данными, в частности, как обрабатывать значения NAN в Pandas dataframes. .
Вы узнаете обо всех разных причинах, по которым Nans появляются в ваших данных данных и как справиться с ними. Давайте начнем!
Проверка серии для NAN ценностей
Проблема Как проверить серию для ценностей NAN?
Посмотрите на следующий код:
import pandas as pd import numpy as np data = pd.Series([0, np.NaN, 2]) result = data.hasnans print(result) # True
Серия может содержать Нан
-Валены – аббревиатура для Не – номер – Используйте неопределенные значения.
Чтобы проверить, содержит ли серия один или несколько Нан
Значение, используйте атрибут Хаснаны
Отказ Атрибут возвращает Правда
Если есть хотя бы один Нан
ценность и Ложь
иначе.
Есть Нан
Значение в серии, поэтому выход Правда
Отказ
Фильтрация серии генерирует NAN
Проблема : Когда фильтрация Серия с где() И никакой элемент не передает условие фильтрации, в чем же результат?
import pandas as pd xs = pd.Series([5, 1, 4, 2, 3]) xs.where(xs > 2, inplace=True) result = xs.hasnans print(result) # True
Метод где ()
Фильтрует серию на Состояние Отказ Только элементы, которые удовлетворяют условию, остаются в полученной серии. А что происходит, если ценность не удовлетворяет условию? По умолчанию все строки не удовлетворяют условию, заполнены Нан
-значения.
Вот почему наша серия содержит Нан
-values после фильтрации его методом где ()
Отказ
Работа с несколькими сериями разных длин
Проблема : Если вам элемент-мудрый добавьте две серии объектов с другим количеством элементов – что происходит с оставшимися элементами?
import pandas as pd s = pd.Series(range(0, 10)) t = pd.Series(range(0, 20)) result = (s + t)[1] print(result) # 2
Чтобы добавить два серии элемент-мудрый, используйте оператор добавления по умолчанию +
Отказ Сериал не нужно иметь такого же размера, потому что как только первые серии заканчиваются, последующие результаты элемента – это Нан
значения.
При индексе 1
В полученной серии вы получаете результат 1 +
Отказ
Создайте dataframe из списка словарей с неравными ключами
Проблема : Как создать dataframe из списка словарей, если у словарей есть неравные ключи? DataFrame ожидает, что те же столбцы могут быть доступны для каждой строки!
import pandas as pd data = [{'Car':'Mercedes', 'Driver':'Hamilton, Lewis'}, {'Car':'Ferrari', 'Driver':'Schumacher, Michael'}, {'Car':'Lamborghini'}] df = pd.DataFrame(data, index=['Rank 2', 'Rank 1', 'Rank 3']) df.sort_index(inplace=True) result = df['Car'].iloc[0] print(result) # Ferrari
Вы можете создать DataFrame из A Список словарей Отказ Клавиши словарей определяют этикетки столбцов, и значения определяют записи столбцов. Не все словари должны содержать одни и те же клавиши. Если словарь не содержит определенного ключа, это будет интерпретироваться как Нан
-значение.
Этот фрагмент кода использует строковые метки в качестве значений индекса в Сортировать DataFrame. После сортировки DataFrame строка с индексом метки Ранг 1
на месте 0
В DataFrame и значение в столбце Автомобиль
это Ferrari
Отказ
Сортировка данных DataFrame по столбцу с значениями NAN
Проблема : Что произойдет, если вы сортируете dataframe по столбцу, если столбец содержит Нан значение?
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 # ---------- selection = df.sort_values(by="engine-size") result = selection.index.to_list()[0] print(result) # 1
В этом фрагменте кода вы сортируете строки DataFrame по значкам столбца Размер двигателя
Отказ
Главное то, что Нан
Значения всегда перемещаются в конец в сортировке PandaS. Таким образом, первое значение – 1.8
который принадлежит к ряду с индексным значением 1
Отказ
Считайте ненанские значения
Проблема : Как подсчитать количество элементов в столбце DataFrame, которые не являются Нан ?
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.count()[5] print(result) # 4
Метод count ()
Возвращает количество не- Нан
Значения для каждого столбца. DataFrame DF
имеет пять рядов. Пятая колонна Содержит один Нан
значение. Следовательно, количество пятой колонны – 4
Отказ
Падение 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=["price"]) selection2 = df.dropna() print(len(selection1), len(selection2)) # 5 4
DataFrame’s Dropna ()
Способ удаляет все строки, которые содержат Нан
Значение в любом из его колонн. Но как ограничить столбцы, которые будут отсканированы для Нан
значения?
Передав список меток столбца в дополнительный параметр подмножество
, вы можете определить, какие столбцы вы хотите рассмотреть.
Звонок Dropna ()
Без ограничения, капли линии 2
Из-за Нан
Значение в столбце Размер двигателя
Отказ Когда вы ограничиваете колонны только на Цена
, никакие ряды не будут сброшены, потому что нет Нан
Значение присутствует.
Западайте 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([0, 1, 2], inplace=True) df.reset_index(inplace=True) result = df.index.to_list() print(result) # [0, 1]
Метод падение ()
На DataFrame удаляет строки или столбцы по индексу. Вы можете пройти одно значение или список значений.
По умолчанию в помещении
Параметр установлен на Ложь
Так что модификации не повлияют на исходный объект dataframe. Вместо этого метод возвращает модифицированную копию датафарама. В головоломке вы набор в помещении
к Правда
Таким образом, делеции выполняются непосредственно на DataFrame.
После удаления первых трех строк первые два метки индекса являются 3 и 4. Вы можете сбросить индексацию по умолчанию, вызывая метод RESET_INDEX ()
На DataFrame, чтобы индекс снова запускается в 0. Поскольку в DataFrame осталось только два ряда строк, результат – [0, 1]
Отказ
Согласие разнородных данных, заполненных нан
Проблема Как объединить два данных данных, если у них есть разные столбцы?
import pandas as pd df = pd.read_csv("Cars.csv") df2 = pd.read_csv("Cars2.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 # ---------- # Additional Dataframe "df2" # ---------- # make origin # 0 skoda Czechia # 1 toyota Japan # 2 ford USA # ---------- try: result = pd.concat([df, df2], axis=0, ignore_index=True) print("Y") except Exception: print ("N") # Y
Даже если данные Dataframes имеют разные столбцы, вы можете объединить их.
Если DataFrame 1 имеет столбцы A и B и DataFrame 2, имеет столбцы C и D, результат ConcateNation DataFrames 1 и 2 представляет собой DataFrame с столбцами A, B, C и D. Пропущенные значения в строках заполнены Нан
Отказ
Внешнее слияние
Проблема : При объединении) две датаформы – что происходит, если есть отсутствующие значения?
import pandas as pd df = pd.read_csv("Cars.csv") df2 = pd.read_csv("Cars2.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 # ---------- # Additional dataframe "df2" # ---------- # make origin # 0 skoda Czechia # 1 mazda Japan # 2 ford USA # ---------- result = pd.merge(df, df2, how="outer", left_on="make", right_on="make") print(len(result["fuel"])) print(result["fuel"].count()) # 7 # 5
С функцией панды Слияние ()
и параметр Как
установить внешний
, вы можете выполнить внешнее соединение Отказ
Полученное значение dataframe внешнего соединения содержит все значения из обоих входных данных; Отсутствующие значения заполнены Нан
Отказ
Кроме того, эта головоломка показывает, как Нан
Значения подсчитаны Лен ()
Функция, тогда как метод count ()
не включает Нан
значения.
Замена нана
Проблема : Как заменить все Нан Значения в DataFrame с заданным значением?
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.fillna(2.0, inplace=True) result = df["engine-size"].sum() print(result) # 13.8
Метод Fillna ()
заменяет Нан
значения с новым значением. Таким образом, сумма всех значений в столбце Размер двигателя
13,8.
Длина против подсчета разницы – это нан!
Проблема : В чем разница между Лен () и то считать() Функции?
import pandas as pd df = pd.read_csv("Cars.csv") df2 = pd.read_csv("Cars2.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 # ---------- # Additional dataframe "df2" # ---------- # make origin # 0 skoda Czechia # 1 mazda Japan # 2 ford USA # ---------- result = pd.merge(df2, df, how="left", left_on="make", right_on="make") print(len(result["fuel"])) print(result["fuel"].count()) # 3 # 1
В левом соединении левый DataFrame – это мастер, и все его значения включены в полученное значение dataframe.
Поэтому результат DataFrame содержит три ряда, поскольку Skoda
и Форд
Не появляйтесь в DataFrame DF
только один ряд для Mazda
содержит значение.
Опять же, мы видим разницу между использованием функции Лен ()
который также включает Нан
Значения и метод count ()
который не считается Нан
значения.
Равен () против сравнения 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["engine-size_copy"] = df["engine-size"] check1 = (df["engine-size_copy"] == df["engine-size"]).all() check2 = df["engine-size_copy"].equals(df["engine-size"]) print(check1 == check2) # False
Этот фрагмент кода показывает, как сравнивать столбцы или целые дата данных относительно формы и элементов.
Сравнение с использованием оператора ==
Возвращает Ложь
Для нашего датафарама, потому что сравнение Нан
-Валены с ==
всегда дает Ложь
Отказ
С другой стороны, df.equals ()
позволяет сравнивать две серии или данных данных. В этом случае Нан
-Валены в том же месте считаются равными.
Заголовки столбцов не должны иметь один и тот же тип, но элементы внутри столбцов должны быть одинакового dtype
Отказ
С результата Check1
это Ложь
и результат Check2
Урожайность Правда
Окончательный выход – Ложь
Отказ
Куда пойти отсюда?
Достаточно теории, давайте познакомимся!
Чтобы стать успешным в кодировке, вам нужно выйти туда и решать реальные проблемы для реальных людей. Вот как вы можете легко стать шестифункциональным тренером. И вот как вы польские навыки, которые вам действительно нужны на практике. В конце концов, что такое использование теории обучения, что никто никогда не нуждается?
Практические проекты – это то, как вы обостряете вашу пилу в кодировке!
Вы хотите стать мастером кода, сосредоточившись на практических кодовых проектах, которые фактически зарабатывают вам деньги и решают проблемы для людей?
Затем станьте питоном независимым разработчиком! Это лучший способ приближения к задаче улучшения ваших навыков Python – даже если вы являетесь полным новичком.
Присоединяйтесь к моему бесплатным вебинаре «Как создать свой навык высокого дохода Python» и посмотреть, как я вырос на моем кодированном бизнесе в Интернете и как вы можете, слишком от комфорта вашего собственного дома.
Присоединяйтесь к свободному вебинару сейчас!
Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.
Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python One-listers (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.
Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.