Функция Pandas df.dropna()
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 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, содержащий пропущенные значения, где возраст Ван У равен
- , а зарплата Чжао Лю равна
NaNИспользованиеNaN。 - с параметрами по умолчанию все строки, содержащие пропущенные значения, были удалены.
df.dropna()Результат сохранил данные Чжан Саня, Ли Сы и Цянь Ци и удалил Ван У и Чжао Лю. - Пример 2: Удаление столбцов с пропущенными значениями
Пример 2: Удаление столбцов с пропущенными значениями
Пример
Пример
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 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 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 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()для заполнения пропущенных значений.
Другие расширения