Как удалить строки pandas dataframe, значение которых в определенном столбце равно nan

7 ответов

Лучший ответ

На самом деле в более поздних версиях панд это даст TypeError:

Вы можете сделать это, передавая список или словарь:

Но я рекомендую использовать NaN, а не None:

99

Andy Hayden
13 Июн 2013 в 21:29

, вероятно, то, что вы ищете. Так

Из panda docs :

14

user2966041
9 Апр 2014 в 21:38

Я предпочитаю решение с использованием с из-за его простоты и элегантности:

Вы также можете иметь больше замен:

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

12

Michael Dorner
25 Окт 2018 в 20:40

Установить нулевые значения можно с помощью :

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

Freek Wiekmeijer
15 Мар 2019 в 08:26

2

Shravan kp
13 Янв 2019 в 02:21

Используя replace и присваивая новый df:

daniel rocha
28 Дек 2019 в 12:30

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

Панды лучше подходят для работы со скалярными типами, так как многие методы для этих типов могут быть векторизованы. Pandas пытается последовательно обрабатывать None и NaN, но NumPy не может.

Мое предложение (и Энди) — придерживаться NaN.

Но чтобы ответить на ваш вопрос …

Pandas> = 0.18: используйте аргумент с

Если вы загрузили эти данные из CSV / Excel, у меня есть для вас хорошие новости. Вы можете отменить это в корне во время загрузки данных вместо того, чтобы писать исправление с кодом в качестве следующего шага.

Большинство функций (например, и ` X2`) принять атрибут .

Теперь, чтобы преобразовать символы в NaN, выполните:

И похоже на другие функции / форматы файлов.

P.S .: На v0.24 + вы можете сохранить целочисленный тип, даже если в вашем столбце есть NaN (да, поговорите о том, как получить торт и съесть его тоже). Вы можете указать

Тип dtype — это не обычный тип int, а скорее Есть и другие варианты.

Обработка числовых данных: с помощью

Если вы имеете дело с числовыми данными, более быстрое решение — использовать с аргументом , который приводит недействительные значения (значения, которые нельзя преобразовать в числовые) к NaN.

Чтобы сохранить (обнуляемое) целое число dtype, используйте

Чтобы привести несколько столбцов, используйте :

… и назначить результат обратно после.

Дополнительную информацию можно найти в этом ответе.

5

cs95
8 Дек 2019 в 09:25

Куда пойти отсюда?

Достаточно теории, давайте познакомимся!

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

Практические проекты – это то, как вы обостряете вашу пилу в кодировке!

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

Затем станьте питоном независимым разработчиком! Это лучший способ приближения к задаче улучшения ваших навыков Python – даже если вы являетесь полным новичком.

Присоединяйтесь к моему бесплатным вебинаре «Как создать свой навык высокого дохода Python» и посмотреть, как я вырос на моем кодированном бизнесе в Интернете и как вы можете, слишком от комфорта вашего собственного дома.

Присоединяйтесь к свободному вебинару сейчас!

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

Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python One-listers (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.

Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.

Я пробовал все варианты выше, но мой DataFrame просто не обновляется!

, как и большинство других функций в pandas API, в результате возвращает новый DataFrame (копию оригинала с изменениями), поэтому вы должны вернуть его, если хотите увидеть изменения.

Справка

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.dropna.html

еще одно решение, использующее тот факт, что :

Другая версия:

Зачем использовать это Series.notna() ?

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

Например, в моем фрейме данных он содержал 82 столбца, из которых 19 содержали по крайней мере одно нулевое значение.

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

Заметка: Приведенный выше код удаляет все ваши нулевые значения. Если вам нужны нулевые значения, обработайте их раньше.

Ссылка «Другой вопрос»

Здесь можно добавить ‘&’, чтобы добавить дополнительные условия, например.

Обратите внимание, что при оценке операторов pandas нуждаются в скобках. 2 Извините, но OP хотят еще чего-нибудь

Кстати, ваш код неверен, верните ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().. Вам нужно добавить скобки — df = df[(df.EPS > 2.0) & (df.EPS , но и это не ответ на этот вопрос

2 Извините, но OP хотят еще чего-нибудь. Кстати, ваш код неверен, верните ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().. Вам нужно добавить скобки — df = df[(df.EPS > 2.0) & (df.EPS , но и это не ответ на этот вопрос.

Западайте 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 удаляет / выбирает строки или столбцы, содержащие определенные значения

http-equiv=»Content-Type» content=»text/html;charset=UTF-8″>yle=»margin-bottom:5px;»>Теги:  python  pandas

результат операции:

результат операции:

3. Удалить строки или столбцы, содержащие пустые значения

Идея реализации: использоватьpandas.DateFrame.fillnaНазначьте определенное значение пустому значению, а затем используйте метод, описанный выше, чтобы найти эти строки или столбцы, содержащие определенные значения, и удалить их.

результат операции:

Интеллектуальная рекомендация

1. Для реальных сигналов (для понимания): A (ω) является соотношением амплитуды выходного сигнала и амплитуды входного сигнала, называемого частотой амплитуды. Φ (ω) — это разница межд…

Один. вести Многие люди задавали некоторые вопросы о создании проекта Flex + LCDS (FDS) в сообщениях и группах. Из-за операции ее трудно четко объяснить, поэтому я написал простой учебник (я обещал эт…

package com.example.phonehttp; import android.os.Bundle; import android.os.Handler; import android.app.Activity; import android.widget.ScrollView; import android.widget.TextView; public class MainActi…

Он предназначен для реализации подкласса того же родительского класса с родительским классом. Полиморфизм Один и тот же ссылочный тип использует разные экземпляры для выполнения разных операций; Идея …

тема: Объедините два упорядоченных слоя в новый заказанный список и возврат. Новый список состоит из всех узлов двух связанных списков, данных сплавным. Пример: Анализ: два связанных списка состоит в …

Вам также может понравиться

D. Самая ценная строка Пример ввода 2 2 aa aaa 2 b c Образец вывода aaa c На самом деле, будучи задетым этим вопросом, вы должны быть осторожны. После инвертирования строки, если две строки имеют один…

Given a 2D integer matrix M representing the gray scale of an image, you need to design a smoother to make the gray scale of each cell becomes the average gray scale (rounding down) of all the 8 surro…

calc () может быть очень незнакомым для всех, и трудно поверить, что calc () является частью CSS. Поскольку он выглядит как функция, почему он появляется в CSS, поскольку это функция? Этот момент такж…

Основываясь на дереве регрессии, сформированном CART, а также на предварительной и последующей обрезке дерева, код выглядит следующим образом:…

Откат Обновление в режиме онлайн с версии Centos (CentOS Linux версии 7.3.1611 (Core) до CentOS Linux версии 7.5.1804 (Core)) # ошибка соединения yum-ssh после обновления yexpected key exchange group …

7 ответов

Лучший ответ

Другой способ — использовать :

2

sophocles
19 Мар 2021 в 14:05

Использовать

См. подтверждение регулярного выражения.

ПОЯСНЕНИЕ

Ryszard Czech
19 Мар 2021 в 22:57

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

Например

Выход

1

The fourth bird
19 Мар 2021 в 18:15

Я хочу объяснить, почему вы получили такой результат. Это связано с тем, что имеет особое значение при использовании в шаблоне, re docs a> список специальных символов начинается с

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

Выход

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

1

Daweo
19 Мар 2021 в 14:03

Сведения о регулярном выражении .

  • : подтвердить позицию в начале строки
  • : группа без захвата, соответствующая символу
  • : соответствует предыдущей группе без захвата ноль или один раз
  • : группа захвата, которая соответствует любому символу, кроме терминаторов строки, ноль или более раз, но как можно меньшее количество раз ()
  • : группа без захвата, которая соответствует
  • : соответствует предыдущей группе без захвата ноль или один раз
  • : утверждает позицию в конце строки

См.

2

Shubham Sharma
19 Мар 2021 в 14:40

Вы также можете использовать :

2

Mayank Porwal
19 Мар 2021 в 14:18

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

В регулярных выражениях есть специальные символы, которые увеличивают функциональность. Здесь «$» означает, что заканчивается на. Так что, если вы хотите просто воздействовать на укусы, оканчивающиеся на ‘.T’, вы должны добавить это в конец. Часть выражения, которая является ретроспективной, — ‘(?

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

Знак ‘?

Чтобы заменить слова, начинающиеся с «.» очень просто. Это просто противоположный якорь,

https://regex101.com/ — отличный веб-сайт, помогающий создавать регулярные выражения. Это также объяснит, что делает ваше регулярное выражение.

2

vip-evan
19 Мар 2021 в 14:17

Равен () против сравнения 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

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

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

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

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

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

Длина против подсчета разницы – это нан!

Проблема : В чем разница между Лен () и то считать() Функции?

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))
print(result.count())
# 3
# 1

В левом соединении левый DataFrame – это мастер, и все его значения включены в полученное значение dataframe.

Поэтому результат DataFrame содержит три ряда, поскольку и Не появляйтесь в 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
# ----------

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

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

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

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

Внешнее слияние

Проблема : При объединении) две датаформы – что происходит, если есть отсутствующие значения?

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))
print(result.count())
# 7
# 5

С функцией панды и параметр установить , вы можете выполнить внешнее соединение Отказ

Полученное значение dataframe внешнего соединения содержит все значения из обоих входных данных; Отсутствующие значения заполнены Отказ

Кроме того, эта головоломка показывает, как Значения подсчитаны Функция, тогда как метод не включает значения.

Сортировка данных 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()
print(result)
# 1

В этом фрагменте кода вы сортируете строки DataFrame по значкам столбца Отказ

Главное то, что Значения всегда перемещаются в конец в сортировке PandaS. Таким образом, первое значение – который принадлежит к ряду с индексным значением Отказ

Согласие разнородных данных, заполненных нан

Проблема Как объединить два данных данных, если у них есть разные столбцы?

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(, 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. Пропущенные значения в строках заполнены Отказ

Считайте ненанские значения

Проблема : Как подсчитать количество элементов в столбце 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()
print(result)
# 4

Метод Возвращает количество не- Значения для каждого столбца. DataFrame имеет пять рядов. Пятая колонна Содержит один значение. Следовательно, количество пятой колонны – Отказ

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

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