Функция Pandas df.dropna()

Pandas: общие функции


df.dropna()является функцией в Pandas, используемой для удаления строк или столбцов, содержащих пропущенные значения.

) — распространённая проблема.NaN、NoneилиNULLФункция предоставляет простой способ очистки данных. Вы можете выбрать удаление строк или столбцов, содержащих пропущенные значения, или фильтровать данные на основе доли пропущенных значений.dropna()Базовый синтаксис и параметры


Базовый синтаксис и параметры

dropna()для вызова..Формат синтаксиса

Формат синтаксиса

DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)

Описание параметра

Type Обязательно или нет Описание Значение по умолчанию int или str
axis Optional Определяет, удалять строки или столбцы. Указывает на удаление строк с пропущенными значениями;0или'index'Указывает на удаление столбцов с пропущенными значениями.1или'columns'Optional 0
how str Задаёт условие удаления. Указывает на удаление, если есть какие-либо пропущенные значения;'any'Указывает на удаление только в том случае, если все значения пропущены.'all'Optional 'any'
thresh int Задаёт минимальное количество непропущенных значений. Если количество непропущенных значений в строке (или столбце) меньше , то строка (или столбец) удаляется.threshOptional Отсутствует
подмножество массивоподобный Указывает, в каких столбцах (или строках) проверять пропущенные значения. Если , затемaxis=0указывает имена столбцов; еслиsubset, затемaxis=1указывает индексы строк.subsetOptional Отсутствует
inplace bool Если , изменяет исходный DataFrame напрямую и не возвращает новый объект; еслиTrue, возвращает новый DataFrame, оставляя исходные данные без изменений.FalseОписание возвращаемого значения False

Описание возвращаемого значения

  • ), илиinplace=False(еслиNoneВозвращаемый DataFrame не содержит строк или столбцов с пропущенными значениями.inplace=True)。
  • Примеры

Примеры

использование.dropna()Пример 1: Удаление строк с пропущенными значениями

Пример 1: Удаление строк с пропущенными значениями

Пример

Пример

import pandas as pd
import numpy as np

'Name'
data = {
    'Zhang San': ['Li Si', 'Wang Wu', 'Zhao Liu', 'Qian Qi', 'age'],
    # возраст Wang Wu пропущен: [25, 30, np.nan, 35, 28],  'Зарплата'
    # зарплата Zhao Liu пропущена: [5000, 6000, 5500, np.nan, 7000],  'Department'
    'Технологии': ['Маркетинг', 'Технологии', 'Маркетинг', 'Технологии', “Исходные данные:”]
}
df = pd.DataFrame(data)

print(# Удалить строки с пропущенными значениями (поведение по умолчанию))
print(df)
print("=" * 50)

"Данные после удаления пропущенных значений:"
df_cleaned = df.dropna()

print(Ожидаемый вывод:)
print(df_cleaned)

Анализ кода:

原始数据:
    姓名   年龄    薪资  部门
0  张三  25.0  5000.0  技术
1  李四  30.0  6000.0  市场
2  王五   NaN  5500.0  技术
3  赵六  35.0     NaN  市场
4  钱七  28.0  7000.0  技术
==================================================
删除缺失值后的数据:
    姓名   年龄    薪资  部门
0  张三  25.0  5000.0  技术
1 李四  30.0  6000.0  市场
4  钱七  28.0  7000.0  技术

Мы создали DataFrame, содержащий пропущенные значения, где возраст Ван У равен

  1. , а зарплата Чжао Лю равнаNaNИспользованиеNaN。
  2. с параметрами по умолчанию все строки, содержащие пропущенные значения, были удалены.df.dropna()Результат сохранил данные Чжан Саня, Ли Сы и Цянь Ци и удалил Ван У и Чжао Лю.
  3. Пример 2: Удаление столбцов с пропущенными значениями

Пример 2: Удаление столбцов с пропущенными значениями

Пример

Пример

import pandas as pd
import numpy as np

'Name'
data = {
    'Zhang San': ['Li Si', 'Wang Wu', 'Zhao Liu', 'age'],
    'Зарплата': [25, 30, 35, 40],
    # В нескольких столбцах есть пропущенные значения: [5000, np.nan, 5500, np.nan],  'Department'
    'Marketing': [np.nan, 'Technology', 'Marketing', 'city'],
    'Beijing': ['Shanghai', 'Guangzhou', 'Shenzhen', # Нет пропущенных значений]  “Исходные данные:”
}
df = pd.DataFrame(data)

print(# Удалить столбцы с пропущенными значениями)
print(df)
print("=" * 50)

Данные после удаления столбцов с пропущенными значениями:
df_cleaned = df.dropna(axis=1)

print(Ожидаемый вывод:)
print(df_cleaned)

Анализ кода:

原始数据:
    姓名  年龄    薪资  部门  城市
0  张三  25  5000.0  NaN  北京
1  李四  30     NaN  市场  上海
2  王五  35  5500.0  技术  广州
3  赵六  40     NaN  市场  深圳
==================================================
删除缺失值列后的数据:
    姓名  年龄  城市
0  张三  25  北京
1  李四  30  上海
2  王五  35  广州
3  赵六  40  深圳

Настройка

  • указывает на выполнение операции по столбцу.axis=1Столбцы Salary и Department содержат пропущенные значения, поэтому они удаляются.
  • Столбцы Name, Age и City не содержат пропущенных значений, поэтому они сохраняются.
  • Пример 3: Использование параметра thresh для управления условиями удаления

Пример 3: Использование параметра thresh для управления условиями удаления

threshПример

Пример

import pandas as pd
import numpy as np

# Имеет 2 пропущенных значения
data = {
    'A': [1, 2, np.nan, 4, 5],
    'B': [np.nan, 2, 3, 4, np.nan],  # Нет пропущенных значений
    'C': [1, 2, 3, 4, 5],  # Содержит 3 пропущенных значения
    'D': [np.nan, np.nan, np.nan, 4, 5]  “Исходные данные:”
}
df = pd.DataFrame(data)

print(# Оставить только строки, содержащие не менее 3 непропущенных значений)
print(df)
print("=" * 50)

"Оставить строки, содержащие не менее 3 непропущенных значений:"
df_cleaned = df.dropna(thresh=3)

print(Ожидаемый вывод:)
print(df_cleaned)

Анализ кода:

原始数据:
     A    B  C    D
0  1.0  NaN  1.0  NaN
1  2.0  2.0  2.0  NaN
2  NaN  3.0  3.0  NaN
3  4.0  4.0 4.0  4.0
4  5.0  NaN  5.0  5.0
==================================================
保留至少3个非缺失值的行:
     A    B  C    D
1  2.0  2.0  2.0  NaN
3  4.0  4.0 4.0  4.0

Строка 0 содержит только 1 непропущенное значение (1.0), поэтому она удаляется.

  • Строка 1 содержит 3 непропущенных значения (2.0, 2.0, 2.0), поэтому она сохраняется.
  • Строка 2 содержит только 2 непропущенных значения (3.0, 3.0), поэтому она удаляется.
  • Строка 3 содержит 4 непропущенных значения, поэтому она сохраняется.
  • Строка 4 содержит только 3 непропущенных значения (5.0, 5.0, 5.0), поэтому она сохраняется.
  • Пример 4: Использование subset для указания проверяемых столбцов

Пример 4: Использование subset для указания проверяемых столбцов

параметра.subsetПример

Пример

import pandas as pd
import numpy as np

'Name'
data = {
    'Zhang San': ['Li Si', 'Wang Wu', 'Zhao Liu', 'age'],
    # Возраст Li Si отсутствует: [25, np.nan, 35, 40],  'Salary'
    # Зарплата Wang Wu отсутствует: [5000, 6000, np.nan, 8000],  'Department'
    'Технологии': ['Маркетинг', 'Технологии', 'Маркетинг', “Исходные данные:”]
}
df = pd.DataFrame(data)

print(# Проверить отсутствующие значения только в столбцах "Name" и "Department")
print(df)
print("=" * 50)

'Name'
df_cleaned = df.dropna(subset=['Department', Данные после проверки отсутствующих значений только в столбцах Name и Department:])

print(# Проверить отсутствующие значения только в столбце "薪资")
print(df_cleaned)
print("=" * 50)

'Зарплата'
df_cleaned2 = df.dropna(subset=["Данные после проверки отсутствующих значений только в столбце salary:"])

print(Ожидаемый вывод:)
print(df_cleaned2)

Анализ кода:

原始数据:
    姓名   年龄    薪资  部门
0  张三  25.0  5000.0  技术
1  李四   NaN  6000.0  市场
2  王五  35.0     NaN  技术
3  赵六  40.0  8000.0  市场
==================================================
只在姓名和部门列检查缺失值后的数据:
    姓名   年龄    薪资  部门
0  张三  25.0  5000.0  技术
1  李四   NaN  6000.0  市场
2  王五  35.0     NaN  技术
3  赵六  40.0  8000.0  市场
==================================================
只在薪资列检查缺失值后的数据:
    姓名   年龄    薪资  部门
0  张三  25.0  5000.0  技术
1  李四  30.0  6000.0  市场
3  赵六  40.0  8000.0  市场

В столбцах Name и Department нет отсутствующих значений, поэтому все строки сохраняются после проверки.

  • В столбце Salary зарплата Wang Wu
  • , поэтому строка 2 удаляется.NaNПример 5: Использование how='all' для удаления только строк, в которых все значения отсутствуют

Пример 5: Использование how='all' для удаления только строк со всеми отсутствующими значениями

how='all'Пример

Пример

import pandas as pd
import numpy as np

“Исходные данные:”
data = {
    'A': [1, np.nan, np.nan, 4],
    'B': [2, np.nan, np.nan, 5],
    'C': [3, np.nan, np.nan, 6]
}
df = pd.DataFrame(data)

print(# Удалить строки, в которых все значения пропущены)
print(df)
print("=" * 50)

После удаления всех строк с пропущенными значениями:
df_cleaned = df.dropna(how='all')

print(Ожидаемый вывод:)
print(df_cleaned)

Анализ кода:

原始数据:
     A    B    C
0  1.0  2.0  3.0
1  NaN  NaN  NaN
2  NaN  NaN  NaN
3  4.0  5.0  6.0
==================================================
删除全部为缺失值的行后:
     A    B    C
0  1.0  2.0  3.0
3  4.0  5.0  6.0

Все значения в строках 1 и 2 равны

  • , используяNaNудалите их.how='all'Удалите их.
  • Строки 0 и 3 содержат реальные данные и были сохранены.

Примечания

  • dropna()По умолчанию исходный DataFrame не изменяется. Чтобы изменить его на месте, используйтеinplace=Trueпараметра.
  • ИспользуйтеthreshПри использовании параметра задаваемое значение должно основываться на ваших требованиях к качеству данных.
  • Перед удалением данных рекомендуется сначала использоватьdf.isnull().sum()чтобы просмотреть количество пропущенных значений в каждом столбце и принимать более обоснованные решения.
  • Для важных наборов данных используйте с осторожностьюdropna(), так как это может привести к большой потере данных. Возможно, стоит рассмотреть использованиеfillna()для заполнения пропущенных значений.

Часто используемые функции Pandas

Другие расширения