Python的pandas中的DataFrame.dropna()用法,删除缺失值

在 Pandas 中,DataFrame.dropna() 用于删除缺失值(NaN 或 None),是数据清洗的关键操作。以下是详细用法和常见场景:


1. 基本语法

cleaned_df = df.dropna(
    axis=0,          # 删除行(默认)或列(axis=1)
    how='any',       # 'any'(默认,存在缺失即删除)或 'all'(全为缺失才删除)
    thresh=None,     # 保留非缺失值数量≥thresh的行/列
    subset=None,     # 仅检查指定列的缺失情况
    inplace=False    # 是否原地修改(False时返回新DataFrame)
)

2. 核心参数详解

参数 说明 示例
axis 0'index':删除包含缺失值的行(默认)
1'columns':删除列
df.dropna(axis=1)
how 'any':行/列中任一缺失即删除
'all':行/列全部缺失才删除
df.dropna(how='all')
thresh 保留至少含 thresh 个非缺失值的行/列(优先级高于 how df.dropna(thresh=3)
subset 仅对指定列(列表形式)检查缺失值 df.dropna(subset=['Age', 'Salary'])
inplace True:直接修改原DataFrame,不返回新对象
False:返回新DataFrame(默认)
df.dropna(inplace=True)

3. 常见使用场景

(1) 删除所有含缺失值的行(默认行为)
import pandas as pd
import numpy as np

df = pd.DataFrame({
    'A': [1, np.nan, 3],
    'B': ['x', np.nan, 'z'],
    'C': [10, 20, 30]
})

cleaned_df = df.dropna()
print(cleaned_df)

输出

     A  B   C
0  1.0  x  10
2  3.0  z  30
(2) 删除所有含缺失值的列
cleaned_df = df.dropna(axis=1)
print(cleaned_df)

输出

    C
0  10
1  20
2  30
(3) 仅当整行全为缺失值时删除
cleaned_df = df.dropna(how='all')
(4) 保留至少2个非缺失值的行
cleaned_df = df.dropna(thresh=2)
(5) 仅检查特定列的缺失值
cleaned_df = df.dropna(subset=['A', 'B'])

4. 注意事项

  • 缺失值类型:Pandas 将 Nonenp.nan 均视为缺失值。
  • 性能优化:对大型DataFrame,threshhow 更高效。
  • 替代方案:若不想删除数据,可用 df.fillna() 填充缺失值。

5. 可视化对比

原始数据 (df):

A B C
1.0 ‘x’ 10
NaN NaN 20
3.0 ‘z’ 30

执行 df.dropna() 后:

A B C
1.0 ‘x’ 10
3.0 ‘z’ 30

通过灵活组合参数,dropna() 可以精准控制数据清洗的粒度,是处理缺失值的利器!

你可能感兴趣的:(学习,python,pandas,开发语言)