Pandas dropna: Python | Панды DataFrame.dropna ()
Python | Панды DataFrame.dropna ()
Python — отличный язык для анализа данных, в первую очередь благодаря фантастической экосистеме пакетов Python, ориентированных на данные. Pandas является одним из таких пакетов и значительно упрощает импорт и анализ данных.
Иногда файл CSV имеет нулевые значения, которые позже отображаются как NaN в кадре данных. Метод dropand () в Pandas позволяет пользователю по-разному анализировать и отбрасывать строки / столбцы со значениями Null.
Синтаксис:
DataFrameName.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
Параметры:
axis: axis takes int or string value for rows/columns. Input can be 0 or 1 for Integer and ‘index’ or ‘columns’ for String.
how: how takes string value of two kinds only (‘any’ or ‘all’). ‘any’ drops the row/column if ANY value is Null and ‘all’ drops only if ALL values are null.
thresh: thresh takes integer value which tells minimum amount of na values to drop.
subset: It’s an array which limits the dropping process to passed rows/columns through list.
inplace: It is a boolean which makes the changes in data frame itself if True.
Для ссылки на CSV-файл, используемый в коде, нажмите здесь.
Пример № 1: удаление строк с как минимум 1 нулевым значением.
Фрейм данных читается, и все строки с любыми значениями Null удаляются. Размер старого и нового фрейма данных сравнивается, чтобы увидеть, сколько строк имело по крайней мере 1 пустое значение.
|
Выход:
Old data frame length: 458 New data frame length: 364 Number of rows with at least 1 NA value: 94
Поскольку разница составляет 94, в каждом столбце было 94 строки, которые имели по крайней мере 1 пустое значение.
Пример №2. Изменение оси и использование параметров «как» и «на место»
Два кадра данных сделаны. Столбец со всеми значениями = нет добавляется в новый фрейм данных. Имена столбцов проверяются, чтобы увидеть, правильно ли был вставлен пустой столбец. Затем количество столбцов сравнивается до и после сброса значений NaN.
|
Выход:
['Name' 'Team' 'Number' 'Position' 'Age' 'Height' 'Weight' 'College' 'Salary'] ['Name' 'Team' 'Number' 'Position' 'Age' 'Height' 'Weight' 'College' 'Salary' 'Null Column'] Column number before dropping Null column 9 10 Column number after dropping Null column 9 9
Рекомендуемые посты:
Python | Панды DataFrame.dropna ()
0.00 (0%) 0 votes
Python | Панды Index.dropna ()
Python — отличный язык для анализа данных, в первую очередь благодаря фантастической экосистеме пакетов Python, ориентированных на данные. Pandas является одним из таких пакетов и значительно упрощает импорт и анализ данных.
Index.dropna()
Pandas Index.dropna()
возвращает индекс без значений NA / NaN. Все отсутствующие значения удаляются, и возвращается новый объект, в котором нет значений NaN
.
Syntax: Index.dropna(how=’any’)
Parameters :
how : {‘any’, ‘all’}, default ‘any’
If the Index is a MultiIndex, drop the value when any or all levels are NaN.Returns : valid : Index
Пример # 1: Используйте Index.dropna()
чтобы удалить все отсутствующие значения из данного индекса, содержащего данные времени данных.
|
Выход :
Давайте отбросим все значения NaN
из индекса.
Выход :
Как мы видим на выходе, Index.dropna()
удалила все пропущенные значения.
Пример # 2: Используйте Index.dropna()
чтобы удалить все отсутствующие значения в индексе. Индекс содержит данные типа строки.
|
Выход :
Давайте отбросим все пропущенные значения.
Выход :
Как мы видим на выходе, все пропущенные значения месяцев были удалены.
Рекомендуемые посты:
Python | Панды Index.dropna ()
0.00 (0%) 0 votes
Python Pandas-понимание inplace=True
на pandas
библиотека много раз есть возможность изменить объект inplace, например, с помощью следующего оператора. ..
df.dropna(axis='index', how='all', inplace=True)
мне любопытно, что возвращается, а также как объект обрабатывается, когда inplace=True
передается против when inplace=False
.
все операции модификации self
, когда inplace=True
? И когда inplace=False
— Это новый объект, созданный сразу же, например new_df = self
а то new_df
возвращается?
14
автор: Aran Freel
3 ответов
, когда inplace=True
передается, данные переименовываются на месте (он ничего не возвращает), поэтому вы бы использовали:
df. an_operation(inplace=True)
, когда inplace=False
передается (это значение по умолчанию, поэтому не обязательно), выполняет операцию и возвращает копию объекта, поэтому вы должны использовать:
df = df.an_operation(inplace=False)
то, как я использую это
# Have to assign back to dataframe (because it is a new copy)
df = df.some_operation(inplace=False)
или
# No need to assign back to dataframe (because it is on the same copy)
df.some_operation(inplace=True)
вывод:
if inplace is False
Assign to a new variable;
else
No need to assign
Я обычно использую с numpy.
вы используете inplace=True, если вы не хотите сохранять обновленные данные в ту же переменную
data["column1"].where(data["column1"]< 5, inplace=True)
это то же самое, что…
data["column1"] = data["column1"].where(data["column1"]< 5)
Pandas .dropna() при указании атрибута
У меня есть этот код для удаления значений null из типа столбца, в частности, глядя на собаку.
cd.loc[cd['Type'] == 'Dog'].dropna(subset = ['Killed'], inplace = True)
Я хотел бы dropna, когда столбец [‘Killed’], связанный с типом = Dog, имеет значение NaN.
Приведенный выше код генерирует эту ошибку pandas :
A value is trying to be set on a copy of a slice from a DataFrame
Есть ли другой способ, где я могу dropna на [‘Killed’], когда [‘Type’] == ‘Dog’?
(Это мой первый пост), извините, если я не могу объяснить правильно
Овации
python
pandas
Поделиться
Источник
Niche. P
31 августа 2016 в 05:22
2 ответа
- Pandas: своеобразное падение производительности для переименования inplace после dropna
Я сообщил об этом как о проблеме по pandas вопросам . Тем временем я публикую это здесь, надеясь сэкономить время других, если они столкнутся с подобными проблемами. После профилирования процесса, который необходимо было оптимизировать, я обнаружил, что переименование столбцов NOT inplace повышает…
- Pandas dropna не работает должным образом на Мультииндексе
У меня есть Pandas DataFrame с multiIndex. Индекс состоит из даты и текстовой строки. Некоторые из значений NaN и когда я использую dropna(), строка исчезает, как и ожидалось. Однако, когда я смотрю на индекс, используя df.index, отброшенные даты все еще там. Это проблематично, так как когда я…
3
Очень похоже на @BrenBarn’s ответ, но с использованием drop
и inplace
cd. drop(cd[(cd.Type == 'Dog') & (cd.Killed.isnull())].index, inplace=True)
Установка
cd = pd.DataFrame([
['Dog', 'Yorkie'],
['Cat', 'Rag Doll'],
['Cat', None],
['Bird', 'Caique'],
['Dog', None],
], columns=['Type', 'Killed'])
Решение
cd.drop(cd[(cd.Type == 'Dog') & (cd.Killed.isnull())].index, inplace=True)
cd
Эквивалентно закону DeMorgan
cond1 = cd.Type == 'Dog'
cond2 = cd.Killed.isnull()
cd[~cond1 | ~cond2]
Глупая, потому что мне так захотелось!
cd.groupby('Type', group_keys=False) \
.apply(lambda df: df.dropna(subset=['Killed']) if df.name == 'Dog' else df)
Поделиться
piRSquared
31 августа 2016 в 05:53
3
Похоже, что вы говорите, что вы хотите удалить строки, где тип «Dog», а убитый- NaN
. Поэтому просто выберите отрицание этого условия:
cd = cd.loc[~((cd.Type=="Dog") & cd.Killed.isnull())]
Поделиться
BrenBarn
31 августа 2016 в 05:27
Похожие вопросы:
Нельзя сбрасывать NAN с dropna в pandas
Я импортирую pandas как ПД и выполнить приведенный ниже код, и получите следующий результат Код: traindataset = pd.read_csv(‘/Users/train.csv’) print traindataset.dtypes print traindataset.shape…
Напротив dropna() в pandas
У меня есть pandas DataFrame , которые я хочу разделить на наблюдения, для которых нет пропущенных значений и наблюдений с пропущенными значениями. Я могу использовать dropna() для получения строк…
Почему pandas иногда использует аргумент ‘dropna’, а иногда ‘skipna’ в своих методах?
Пожалуйста, считайте это либо вопросом, либо предложением. Pandas иногда использует аргумент ‘dropna’ в своих методах, а иногда ‘skipna’, как в следующих двух случаях:. ..
Pandas: своеобразное падение производительности для переименования inplace после dropna
Я сообщил об этом как о проблеме по pandas вопросам . Тем временем я публикую это здесь, надеясь сэкономить время других, если они столкнутся с подобными проблемами. После профилирования процесса,…
Pandas dropna не работает должным образом на Мультииндексе
У меня есть Pandas DataFrame с multiIndex. Индекс состоит из даты и текстовой строки. Некоторые из значений NaN и когда я использую dropna(), строка исчезает, как и ожидалось. Однако, когда я смотрю…
Тип Pandas Unhashable: ‘list’ при использовании describe()
У меня есть словарь, который имеет другой словарь в качестве его значения и что другой словарь имеет список в качестве его значения. Например, {‘A’ : {‘a’ : [‘1’, ‘2’, ‘3’], ‘b’ : [‘4’, ‘5’], ‘c’ :…
pandas dropna не удаляет nan при использовании np.where
У меня есть эта функция import pandas as pd import numpy as np from shapely. geometry import Point, Polygon def test(e, n): polygon = Polygon([(340,6638),(340,6614),(375,6620),(374,6649)])…
Pandas dropna-хранить удаленные строки
Я использую метод pandas.DataFrame.dropna для удаления строк, содержащих NaN. Эта функция возвращает значение dataframe, исключающее удаленные строки, как показано в документации. Как я могу хранить…
pandas dropna не работает, как ожидалось, на поиске среднего
Когда я запускаю код ниже, я получаю ошибку: TypeError: ‘NoneType’ объект не имеет атрибута getitem import pyarrow import pandas import pyarrow.parquet as pq df =…
Python — Pandas — ключевые ошибки при dropna вызова для определенных подмножеств
Моя цель: я хочу удалить строки, которые имеют NaN в определенных столбцах. Я позволю NaN существовать на некоторых столбцах, но не на других. Английский пример: если значение ‘detail_age’ в строке…
python — Как удалить строки Pandas DataFrame, значение которых в определенном столбце равно NaN
У меня есть DataFrame
и я хочу только записи, столбец EPS
которых не равен NaN
:
>>> df
STK_ID EPS cash
STK_ID RPT_Date
601166 20111231 601166 NaN NaN
600036 20111231 600036 NaN 12
600016 20111231 600016 4. 3 NaN
601009 20111231 601009 NaN NaN
601939 20111231 601939 2.5 NaN
000001 20111231 000001 NaN NaN
… т.е . что-то вроде df.drop(....)
, чтобы получить этот результирующий кадр данных:
STK_ID EPS cash
STK_ID RPT_Date
600016 20111231 600016 4.3 NaN
601939 20111231 601939 2.5 NaN
Как мне это сделать?
700
bigbug
16 Ноя 2012 в 13:17
13 ответов
Лучший ответ
Не бросайте, просто возьмите строки, где EPS не NA:
df = df[df['EPS'].notna()]
557
AMC
16 Фев 2020 в 07:46
Еще одно решение, которое использует тот факт, что np. nan != np.nan
:
In [149]: df.query("EPS == EPS")
Out[149]:
STK_ID EPS cash
STK_ID RPT_Date
600016 20111231 600016 4.3 NaN
601939 20111231 601939 2.5 NaN
10
MaxU
20 Апр 2017 в 21:15
Вы можете использовать метод dataframe notnull или наоборот isnull или numpy.isnan:
In [332]: df[df.EPS.notnull()]
Out[332]:
STK_ID RPT_Date STK_ID.1 EPS cash
2 600016 20111231 600016 4.3 NaN
4 601939 20111231 601939 2.5 NaN
In [334]: df[~df.EPS.isnull()]
Out[334]:
STK_ID RPT_Date STK_ID.1 EPS cash
2 600016 20111231 600016 4.3 NaN
4 601939 20111231 601939 2.5 NaN
In [347]: df[~np.isnan(df.EPS)]
Out[347]:
STK_ID RPT_Date STK_ID.1 EPS cash
2 600016 20111231 600016 4.3 NaN
4 601939 20111231 601939 2. 5 NaN
21
Anton Protopopov
4 Дек 2015 в 07:01
Он может быть добавлен при том, что «&» может использоваться для добавления дополнительных условий, например,
df = df[(df.EPS > 2.0) & (df.EPS <4.0)]
Обратите внимание на то, что при оценке утверждений пандам нужна скобка.
0
aesede
26 Янв 2017 в 23:12
Другая версия:
df[~df['EPS'].isna()]
1
Georgy
10 Фев 2020 в 09:19
Одним из решений может быть
df = df[df. isnull().sum(axis=1) <= Cutoff Value]
Другой способ может быть
df= df.dropna(thresh=(df.shape[1] - Cutoff_value))
Я надеюсь, что это полезно.
-1
Amit Gupta
23 Сен 2019 в 11:00
По какой-то причине ни один из ранее представленных ответов не работал для меня. Это основное решение сделало:
df = df[df.EPS >= 0]
Хотя, конечно, это приведет и к появлению строк с отрицательными числами. Так что, если вы хотите их, возможно, стоит добавить это и после.
df = df[df.EPS <= 0]
-1
samthebrand
9 Окт 2015 в 18:25
Этот вопрос уже решен, но . ..
… также рассмотрим решение, предложенное Wouter в его оригинальный комментарий. Способность обрабатывать недостающие данные, включая dropna()
, встроена в панды явно. Помимо потенциально улучшенной производительности по сравнению с выполнением вручную, эти функции также имеют множество опций, которые могут быть полезны.
In [24]: df = pd.DataFrame(np.random.randn(10,3))
In [25]: df.iloc[::2,0] = np.nan; df.iloc[::4,1] = np.nan; df.iloc[::3,2] = np.nan;
In [26]: df
Out[26]:
0 1 2
0 NaN NaN NaN
1 2.677677 -1.466923 -0.750366
2 NaN 0.798002 -0.906038
3 0.672201 0.964789 NaN
4 NaN NaN 0.050742
5 -1.250970 0.030561 -2.678622
6 NaN 1.036043 NaN
7 0.049896 -0.308003 0.823295
8
Модуль
pyspark.sql — документация PySpark 2.1.0
Создает DataFrame из RDD, списка или pandas.DataFrame.
Когда схема представляет собой список имен столбцов, тип каждого столбца
будет выведено из данных.
Если для схемы задано значение None, она будет пытаться вывести схему (имена и типы столбцов).
из данных, которые должны быть RDD строки,
или namedtuple, или dict.
Когда схема представляет собой pyspark.sql.types.DataType или строку типа данных, она должна соответствовать
реальные данные, или исключение будет выдано во время выполнения.Если данная схема не
pyspark.sql.types.StructType, он будет заключен в
pyspark.sql.types.StructType в качестве его единственного поля, а имя поля будет «значение»,
каждая запись также будет заключена в кортеж, который позже можно будет преобразовать в строку.
Если требуется вывод схемы, samplingRatio используется для определения отношения
строки, используемые для вывода схемы. Первая строка будет использоваться, если samplingRatio равно None.
Параметры: |
|
---|---|
Возвращает: | DataFrame |
Изменено в версии 2.1: Добавлена verifySchema.
>>> l = [('Алиса', 1)] >>> sqlContext.createDataFrame (l) . collect () [Строка (_1 = u'Alice ', _2 = 1)] >>> sqlContext.createDataFrame (l, ['имя', 'возраст']). collect () [Row (name = u'Alice ', age = 1)]
>>> d = [{'name': 'Алиса', 'возраст': 1}] >>> sqlContext.createDataFrame (d) .collect () [Строка (возраст = 1, имя = u'Alice ')]
>>> rdd = sc.parallelize (l) >>> sqlContext.createDataFrame (rdd) .collect () [Строка (_1 = u'Alice ', _2 = 1)] >>> df = sqlContext.createDataFrame (rdd, ['имя', 'возраст']) >>> df.collect () [Row (name = u'Alice ', age = 1)]
>>> из pyspark.sql import Row >>> Человек = Строка ('имя', 'возраст') >>> person = rdd.map (лямбда r: Person (* r)) >>> df2 = sqlContext.createDataFrame (человек) >>> df2.collect () [Row (name = u'Alice ', age = 1)]
>>> из импорта pyspark.sql.types * >>> schema = StructType ([ ... StructField ("имя", StringType (), True), ... StructField ("возраст", IntegerType (), True)]) >>> df3 = sqlContext.createDataFrame (rdd, схема) >>> df3.collect () [Row (name = u'Alice ', age = 1)]
>>> sqlContext. createDataFrame (df.toPandas ()). collect () [Row (name = u'Alice ', age = 1)] >>> sqlContext.createDataFrame (pandas.DataFrame ([[1, 2]])). collect () [Строка (0 = 1, 1 = 2)]
>>> sqlContext.createDataFrame (rdd, "a: string, b: int"). Collect () [Строка (a = u'Alice ', b = 1)] >>> rdd = rdd.map (лямбда-строка: строка [1]) >>> sqlContext.createDataFrame (rdd, "int"). collect () [Строка (значение = 1)] >>> sqlContext.createDataFrame (rdd, "логическое"). collect () Отслеживание (последний вызов последний): ... Py4JJavaError: ...
Как использовать метод Pandas dropna
Из этого туториала Вы узнаете, как использовать метод dropna Pandas для удаления недостающих значений из Python DataFrame.
Объясняет синтаксис dropna (включая важные параметры).
В руководстве также будут показаны понятные пошаговые примеры этого метода.
Если вы ищете что-то конкретное, вы можете щелкнуть любую из следующих ссылок, и ссылка приведет вас в соответствующее место в руководстве.
Содержание:
Сказав это, полное руководство подробно все объяснит. Итак, если вы новичок в Pandas, я рекомендую вам прочитать всю книгу.
Хорошо … давайте начнем с краткого введения в метод dropna.
Краткое введение в метод Pandas dropna
Прежде чем я объясню метод dropna, давайте быстро рассмотрим Pandas.
Dropna — это инструмент в пакете Pandas.
Pandas — это набор инструментов для работы с данными на языке программирования Python.В Pandas есть широкий спектр инструментов для обработки данных, которые позволяют очищать, изменять, агрегировать и изменять форму данных.
В частности, Pandas — это набор инструментов для управления структурой данных, которую мы называем DataFrame.
Если вы новичок в Pandas, вам необходимо знать, что DataFrames представляют собой структуры данных из строк и столбцов, которые (в идеале) выглядят примерно так:
В идеале DataFrame должен иметь чистую структуру строк и столбцов. Но часто, когда мы впервые получаем данные, они немного беспорядочные.Иногда имена переменных необходимо изменить; дата и время неправильно отформатированы; иногда нужно отсортировать данные; и так далее.
Одна из распространенных проблем очистки данных связана с отсутствующими значениями.
Вот где на помощь приходит dropna.
Метод dropna Pandas удаляет записи с отсутствующими данными
Очень просто, метод dropna Pandas — это инструмент для удаления недостающих данных из DataFrame Pandas.
Когда вы получаете новый набор данных, очень часто в некоторых строках отсутствуют значения.Это не всегда так, но очень часто.
Вопрос к аналитику остается, что делать с пропущенными значениями?
Есть множество способов справиться с пропущенными значениями. Один из способов — заполнить недостающие значения.
Но еще один способ справиться с отсутствующими значениями в Pandas DataFrame — просто удалить их.
Это действительно все, что делает метод dropna Pandas. Удаляет записи с пропущенными значениями.
Но детали того, как именно работает dropna, зависят от синтаксиса.
В таком случае давайте посмотрим на синтаксис dropna.
Синтаксис Pandas dropna
В самом простом виде метод dropna чрезвычайно прост.
В простейшей форме вы просто вводите имя DataFrame, затем «.», А затем dropna ()
.
Итак, если у вас есть DataFrame с именем myDataFrame
, код будет выглядеть так:
Когда вы вызываете метод таким образом, dropna ()
будет искать строки с пропущенными значениями.Если он найдет строку с отсутствующим значением, он отбросит всю строку.
Сказав это, есть несколько других параметров, которые вы можете использовать, которые изменят синтаксис и способ работы метода.
Давайте посмотрим на параметры dropna.
Дополнительные параметры dropna
Dropna имеет несколько параметров, которые можно использовать для изменения поведения функции.
Тем не менее, я хочу сосредоточиться на трех:
Есть и другие параметры, а именно ось
и , обмолота
, но мы сосредоточимся на трех перечисленных выше, потому что они являются наиболее распространенными и наиболее полезными.
Имея в виду эти три параметра, это более полный взгляд на синтаксис dropna:
Давайте взглянем на эти три параметра, чтобы вы поняли, что они делают и как работают.
как
(дополнительно)
Параметр how
позволяет указать, «как» метод будет принимать решение об удалении строки из DataFrame.
У этого параметра есть два допустимых аргумента:
-
любой
: еслиhow = 'any'
, dropna удалит строку, если какое-либо из значений в этой строке отсутствует. -
all
: еслиhow = 'all'
, dropna удалит строку только в том случае, если все значений в этой строке отсутствуют.
По умолчанию метод dropna устанавливает how = 'any'
, поэтому, если вы вручную не измените этот параметр, dropna сбросит строку, если в ней отсутствуют какие-либо значения.
подмножество
(необязательно)
Параметр subset
позволяет указать подмножество столбцов, в которых dropna будет искать отсутствующие значения.
Итак, возможно, у вас есть набор данных с 10 переменными, но вы хотите, чтобы dropna смотрела только на 2. Вы можете использовать параметр subset, чтобы ограничить dropna этими двумя столбцами. Я покажу вам пример этого в разделе примеров.
на месте
(дополнительно)
Параметр inplace
позволяет указать, хотите ли вы напрямую изменять DataFrame, с которым вы работаете.
По умолчанию метод dropna не , а напрямую изменяет DataFrame, с которым вы работаете.
По умолчанию dropna фактически создает новый DataFrame и сохраняет исходный DataFrame без изменений.
Синтаксически значение по умолчанию для параметра inplace
— inplace = False
. Это заставляет метод оставить исходный DataFrame без изменений и создать новый DataFrame в качестве вывода.
Однако это поведение можно изменить.
Если вы установите inplace = True
, метод dropna изменит ваш DataFrame напрямую. Это означает, что если вы установите inplace = True
, dropna удалит все отсутствующие значения из исходного набора данных.Ваши данные будут перезаписаны, так что будьте осторожны!
Выход дропна
Теперь, когда мы поговорили о входах и параметрах для управления dropna, давайте поговорим о выходе метода.
По умолчанию dropna создает новый DataFrame в качестве вывода.
Это связано с тем, что по умолчанию для синтаксиса установлено значение inplace = False
.
Как упоминалось ранее, если вы установите inplace = True
, метод dropna вместо этого напрямую изменит ваш исходный DataFrame (и не будет производить новый вывод).
Примеры: как использовать Pandas dropna для удаления строк с отсутствующими данными
Ок. Теперь, когда вы знаете, как работает синтаксис, давайте рассмотрим несколько примеров Pandas dropna.
Примеры:
Сначала запустите этот код
Перед запуском примеров вам нужно сделать пару вещей: импортировать несколько пакетов и создать DataFrame.
Импортные пакеты
Во-первых, вам нужно импортировать как пакет Numpy, так и пакет Pandas.
Нам нужен Numpy, потому что мы собираемся использовать специальное значение из Numpy, np.nan
, в качестве пропущенных значений.
Нам также нужны Pandas для создания нашего DataFrame и использования метода dropna Pandas.
Вот код для импорта Numpy и Pandas:
импортировать numpy как np импортировать панд как pd
Здесь мы импортировали Numpy с псевдонимом np
, и мы импортировали Pandas с псевдонимом pd
.
Создать фрейм данных
Далее мы собираемся создать простой фрейм данных Pandas.
Для этого мы просто воспользуемся функцией pd.DataFrame ()
и предоставим ей словарь значений данных.
sales_data = pd.DataFrame ({"name": [«Уильям», «Эмма», «София», «Маркус», «Эдвард», «Томас», «Итан», np.nan, «Арун», «Аника) "," Пауло "] , «регион»: [np.nan, «Север», «Восток», «Юг», «Запад», «Запад», «Юг», np.nan, «Запад», «Восток», «Юг»] , "продажи": [50000,52000,, np.nan, 42000,72000,49000, np.nan, 67000,65000,67000] , «расходы»: [42000,43000, нп.нан, 44000,38000,39000,42000, нп.нан, 39000,44000,45000]})
И мы можем распечатать его, используя этот оператор печати:
печать (sales_data)
ВЫХОД:
название региона расходы на продажу 0 Уильям NaN 50000,0 42000,0 1 Эмма Норт 52000,0 43000,0 2 Восточная София.0 NaN 3 Маркус Саут NaN 44000.0 4 Эдвард Уэст 42000,0 38000,0 5 Томас Уэст 72000,0 39000. 0 6 Итан Саут 49000,0 42000,0 7 NaN NaN NaN NaN 8 Арун Вест 67000,0 39000,0 9 Аника Восточная 65000,0 44000,0 10 Южный Паулу 67000,0 45000,0
Этот DataFrame имеет четыре переменные: имя
, регион
, продажи
и расходы
.
Также обратите внимание, что в некоторых строках отсутствуют значения: все строки 0, 2, 3 и 7 содержат пропущенные значения. В некоторых строках отсутствует только одно значение, но в строке 7 отсутствуют все значения.
Эти пропущенные значения отображаются как « NaN
». (Технически « NaN
» означает «не число»).
Теперь, когда у нас есть DataFrame с пропущенными значениями, давайте рассмотрим несколько примеров.
ПРИМЕР 1: Удалить строку с любым отсутствующим значением
Сначала мы рассмотрим очень простой пример.
Мы собираемся запустить метод dropna вообще без каких-либо параметров или аргументов.
Вот код:
sales_data. dropna ()
ВЫХОД:
название региона расходы на продажу 0 Уильям Ист 50000,0 42000,0 1 Эмма Норт 52000,0 43000,0 4 Эдвард Уэст 42000,0 38000,0 5 Томас Уэст 72000,0 39000,0 6 Итан Саут 49000,0 42000,0 8 Арун Вест 67000,0 39000,0 9 Аника Восточная 65000,0 44000,0 10 Южный Паулу 67000,0 45000,0
Помните, когда мы создавали DataFrame, все строки 0, 2, 3 и 7 содержали пропущенные значения.
Здесь после использования dropna ()
все строки 0, 2, 3 и 7 были удалены.
Вот и все, что делает dropna! Он удаляет строки с пропущенными значениями (понимает, что NaN
— это пропущенное значение).
Обратите внимание, что код удалил каждую строку, которая содержала любого отсутствующего значения . Если хотя бы одно из значений отсутствовало, вся строка удалялась. Это поведение по умолчанию. По умолчанию для параметра how
установлено значение how = 'any'
, поэтому с помощью этого кода, если какое-либо из значений отсутствует, вся строка удаляется.
Кроме того, как упоминалось ранее, этот код не изменял напрямую sales_data
DataFrame. Он только создал новый DataFrame. Я покажу вам на другом примере, как напрямую изменить исходный DataFrame «на месте».
ПРИМЕР 2: удалить строку, если все значения отсутствуют
Теперь мы собираемся изменить предыдущий пример, чтобы dropna удаляла строку только в том случае, если все значения отсутствуют.
Прежде чем мы это сделаем, давайте снова распечатаем DataFrame:
печать (sales_data)
ВЫХОД:
название региона расходы на продажу 0 Уильям NaN 50000.0 42000,0 1 Эмма Норт 52000,0 43000,0 2 Восточная София.0 NaN 3 Маркус Саут NaN 44000.0 4 Эдвард Уэст 42000,0 38000,0 5 Томас Уэст 72000,0 39000,0 6 Итан Саут 49000,0 42000,0 7 NaN NaN NaN NaN 8 Арун Вест 67000,0 39000,0 9 Аника Восточная 65000,0 44000,0 10 Южный Паулу 67000,0 45000,0
Обратите внимание, что каждая строка 0, 2 и 3 содержит только одно пропущенное значение, но все остальные значения для этих строк присутствуют.
Однако для строки 7, все значений отсутствуют.
Это важно для нашего примера.
Здесь мы собираемся запустить метод dropna с параметром how
, установленным на how = 'all'
. Это приведет к удалению строки только в том случае, если все значений отсутствуют.
sales_data.dropna (как = 'все')
ВЫХОД:
название региона расходы на продажу 0 Уильям NaN 50000.0 42000.0 1 Эмма Норт 52000,0 43000,0 2 Восточная София.0 NaN 3 Маркус Саут NaN 44000.0 4 Эдвард Уэст 42000,0 38000,0 5 Томас Уэст 72000,0 39000,0 6 Итан Саут 49000,0 42000,0 8 Арун Вест 67000,0 39000,0 9 Аника Восточная 65000,0 44000,0 10 Южный Паулу 67000,0 45000,0
Обратите внимание, что строка 7 исчезла. Помните, что строка 7 была строкой, в которой отсутствовали значения для всех столбцов.
Однако строки 0, 2 и 3 все еще присутствуют в выводе. Это потому, что даже если эти строки содержат пропущенные значения, неверно, что все значений отсутствуют. Поскольку эти строки не соответствовали условию «отсутствуют все значения», они остались в выводе.
ПРИМЕР 3: поиск отсутствующего значения в определенных столбцах
Далее мы собираемся ограничить поиск отсутствующих значений определенными столбцами.
Для этого мы будем использовать параметр подмножества.
Здесь мы собираемся установить subset = ['продажи', 'расходы']
.
Это ограничит поиск отсутствующих значений переменными продаж,
и расходов,
.
Давайте посмотрим:
sales_data.dropna (subset = ['продажи', 'расходы'])
ВЫХОД:
название региона расходы на продажу 0 Уильям NaN 50000,0 42000,0 1 Эмма Норт 52000,0 43000,0 4 Эдвард Уэст 42000.0 38000,0 5 Томас Уэст 72000,0 39000,0 6 Итан Саут 49000,0 42000,0 8 Арун Вест 67000,0 39000,0 9 Аника Восточная 65000,0 44000,0 10 Южный Паулу 67000,0 45000,0
Здесь любая строка с отсутствующим значением в столбцах продаж,
или расходов
была удалена.
Обратите внимание, что строка 0 осталась в выводе. Это потому, что для строки 0 отсутствующее значение находится в столбце области .В данном случае это нормально, потому что отсутствующего значения не было в
продажах
или расходах
. Итак, метод dropna сохранил строку в выводе.
ПРИМЕР 4: изменить фрейм данных «на месте»
Наконец, мы собираемся изменить DataFrame «на месте».
Это означает, что мы собираемся напрямую удалить строки из входного DataFrame.
Давайте взглянем на код, а потом я объясню.
Сначала мы сделаем что-то одно, просто ради безопасности наших исходных данных.
Я собираюсь создать копию sales_data
. На всякий случай, если вы хотите продолжить игру с исходным фреймом данных sales_data
DataFrame, мы скопируем его, чтобы использовать копию в этом примере.
sales_data_copy = sales_data.copy ()
Ок. Теперь мы будем работать «на месте» на sales_data_copy
.
sales_data_copy.dropna (inplace = True)
Если вы работаете в среде IDE, обратите внимание, что когда вы запускаете код, он не отправляет никаких выходных данных на консоль.Это потому, что при использовании inplace = True
dropna не создает новый DataFrame. Он напрямую изменяет исходный DataFrame. В этом случае dropna напрямую удалила строки из sales_data_copy
.
Чтобы убедиться в этом, распечатайте sales_data_copy
.
печать (sales_data_copy)
ВЫХОД:
название региона расходы на продажу 1 Эмма Норт 52000,0 43000,0 4 Эдвард Вест 42000,0 38000.0 5 Томас Уэст 72000,0 39000,0 6 Итан Саут 49000,0 42000,0 8 Арун Вест 67000,0 39000,0 9 Аника Восточная 65000,0 44000,0 10 Южный Паулу 67000,0 45000,0
Обратите внимание, что отсутствующие значения были удалены из sales_data_copy
.
Просто помните, что когда вы используете inplace = True
, dropna удалит из ваших данных все строки с пропущенными значениями. Если вы используете этот параметр, будьте очень осторожны и убедитесь, что ваш код работает так, как вам нужно!
Часто задаваемые вопросы о dropna
Теперь, когда мы рассмотрели несколько примеров, давайте рассмотрим вопрос, который обычно задают люди о dropna.
Часто задаваемые вопросы:
Вопрос 1. Почему значения не упали?
Обычный вопрос новичков: «Я запустил dropna, но пропущенные значения не пропали. DataFrame не изменился. Зачем?"
Помните: по умолчанию метод dropna , а не изменяет исходный DataFrame.
Dropna создает новый DataFrame в качестве вывода.
Если вы работаете в среде IDE, этот вывод не будет сохранен, а вместо этого будет отправлен на консоль.
Если вы хотите сохранить вывод, вам нужно сохранить вывод (обычно с новым именем переменной) следующим образом:
sales_data_noNA = sales_data.dropna ()
В этом случае новый DataFrame sales_data_noNA
будет новым DataFrame без пропущенных значений, а sales_data
останется без изменений.
В качестве альтернативы вы также можете использовать параметр inplace
и установить inplace = True
, чтобы напрямую изменить исходный DataFrame.
sales_data.dropna (inplace = True)
Я показал вам, как это сделать в примере 4.
Будьте осторожны ... если вы используете inplace = True
, dropna перезапишет исходный DataFrame. Убедитесь, что ваш код работает именно так, как вам нужно, иначе вы можете удалить часть своих данных!
Оставьте свои вопросы в комментариях ниже
У вас есть другие вопросы?
Если да, оставьте свой вопрос в разделе комментариев ниже.
Присоединяйтесь к нашему курсу, чтобы узнать больше о Pandas
Если вы серьезно относитесь к изучению Pandas, вам следует записаться на наш премиальный курс Pandas под названием Pandas Mastery .
Pandas Mastery научит вас всему, что вам нужно знать о пандах, в том числе:
- Как разделить данные Python на подмножество
- Агрегация данных с помощью Pandas
- Как изменить форму ваших данных
- и более…
Более того, он поможет вам полностью освоить синтаксис за несколько недель. Вы узнаете, как «свободно» писать код Pandas для управления вашими данными.
Подробнее здесь:
Узнать больше о Pandas Mastery
сравните 2 фрейма данных с пандами
2,6 года назад от
Это первый раз, когда я использую pandas, и я действительно не знаю, как справиться с моей проблемой.
На самом деле у меня 2 фрейма данных:
импорт панд
взрыв = панды.read_table ("взрыв")
cluster = pandas.read_table ("кластер")
Вот пример их содержания:
>>> кластер
имя_кластера seq_names
0 1 g1.t1_0035
1 1 g1.t1_0035_0042
2 119365 g1.t1_0042
3 g1.t1_0042_0035
4 71567 g10.t1_0035
5 37976 g10.t1_0035_0042
6 22560 g10.t1_0042
7 г10.t1_0042_0035
8 82698 g100.t1_0035
9 47392 g100.t1_0035_0042
10 28484 g100.t1_0042
11 22580 г100.t1_0042_0035
12 19474 g1000.t1_0035
13 5770 г1000.t1_0035_0042
14 29708 g1000.t1_0042
15 99776 g1000. t1_0042_0035
16 6283 g10000.t1_0035
17 39828 g10000.t1_0035_0042
18 25383 g10000.t1_0042
19 106614 g10000.t1_0042_0035
20 6285 г10001.t1_0035
21 13866 g10001.t1_0035_0042
22 121157 g10001.t1_0042
23 106615 g10001.t1_0042_0035
24 6286 g10002.t1_0035
25 113 g10002.t1_0035_0042
26 25397 g10002.t1_0042
27 106616 g10002.t1_0042_0035
28 4643 g10003.t1_0035
29 13868 g10003.t1_0035_0042
... ... ...
и
[78793 строки x 2 столбца]
>>> взрыв
qseqid sseqid pident length mismatch \
0 г1.t1_0035_0042 g1.t1_0035_0042 100,0 286 0
1 g1.t1_0035_0042 g1.t1_0035 100,0 257 0
2 g1.t1_0035_0042 g9307.t1_0035 26,9 134 65
3 g2.t1_0035_0042 g2.t1_0035_0042 100,0 445 0
4 g2.t1_0035_0042 g2.t1_0035 95,8 451 3
5 g2.t1_0035_0042 g24520.t1_0042_0035 61,1 429137
6 g2.t1_0035_0042 g9924.t1_0042 61.1 429 137
7 g2.t1_0035_0042 g1838.t1_0035 86,2 29 4
8 g3.t1_0035_0042 g3.t1_0035_0042 100,0 719 0
9 g3.t1_0035_0042 g3.t1_0035 84,7 753 62
10 g4.t1_0035_0042 g4. t1_0035_0042 100,0 242 0
11 g4.t1_0035_0042 g3.t1_0035 98,8 161 2
12 g5.t1_0035_0042 g5.t1_0035_0042 100,0 291 0
13 g5.t1_0035_0042 g3.t1_0035 93,1 291 0
14 g6.t1_0035_0042 g6.t1_0035_0042 100,0 152 0
15 g6.t1_0035_0042 g4.t1_0035 100,0 152 0
16 g7.t1_0035_0042 g7.t1_0035_0042 100,0 216 0
17 g7.t1_0035_0042 g5.t1_0035 98,1 160 3
18 g7.t1_0035_0042 g11143.t1_0042 46,5 230 99
19 g7.t1_0035_0042 g27537.t1_0042_0035 40.8 233 111
20 g3778.t1_0035_0042 g3778.t1_0035_0042 100,0 86 0
21 g3778.t1_0035_0042 g6174.t1_0035 98,0 51 1
22 g3778.t1_0035_0042 g20037.t1_0035_0042 100,0 50 0
23 g3778.t1_0035_0042 g37190.t1_0035 100,0 50 0
24 g3778.t1_0035_0042 g15112.t1_0042_0035 66,0 53 18
25 g3778.t1_0035_0042 g6061.t1_0042 66,0 53 18
26 г18109.t1_0035_0042 g18109.t1_0035_0042 100,0 86 0
27 g18109.t1_0035_0042 g33071.t1_0035 100,0 81 0
28 g18109.t1_0035_0042 g32810.t1_0035 96,4 83 3
29 g18109.t1_0035_0042 g17982.t1_0035_0042 98,6 72 1
... ... ... ... ... ...
, если вы сосредоточитесь на базе данных кластера, первый столбец соответствует идентификатору кластера, а внутри этих кластеров есть несколько идентификаторов последовательностей.