在默认情况下,dropna() 方法删除包含任何缺失值的行。可以通过指定 axis 参数来选择删除行(axis=0)还是列(axis=1)。dropna() 方法还可以根据一些规则来控制缺失值的删除。比如,可以通过指定 thresh 参数来删除包含指定数量及以上缺失值的行或列。可以通过指定 subset 参数来只在指定的列中搜索缺失值并删除相应的行或列。可以通过指定 how 参数来控制只删除全为缺失值的行或列还是只删除部分为缺失值的行或列。
需要注意的是,删除缺失值可能会导致数据量的减少,进而影响数据分析的准确性和可信度,因此在删除缺失值时需要谨慎权衡。同时,不同的数据集和分析任务也会有不同的处理方法,需要结合具体情况进行处理。
DataFrame.dropna(
self,
axis: Axis = 0,
how: AnyAll | NoDefault = no_default,
thresh: int | NoDefault = no_default,
subset: IndexLabel = None,
inplace: bool = False,
ignore_index: bool = False,
) -> DataFrame | None
axis : {0 or 'index', 1 or 'columns'}, 默认 0。确定包含缺失值的行或列。
- 0, or 'index' : 删除包含缺失值的行。
- 1, or 'columns' : 删除包含缺失值的列。
- 传递元组或列表以放置在多个轴上。仅允许一个轴。
- how : {'any', 'all'}, 默认 'any'。当我们至少有一个NA或所有NA时,确定是否从DataFrame中删除行或列。
- 'any' : 如果存在任何NA值,请删除该行或列。
- 'all' : 如果所有值均为NA,请删除该行或列。
- thresh : int, 可选。需要这么多非NA值。不能与 how 组合使用。
- subset : 列标签或标签序列, 可选。要考虑的其他轴上的标签,例如,如果要删除行,则这些将是要包含的列列表。
- inplace : bool, 默认 False。是否修改DataFrame而不是创建新的DataFrame。
- ignore_index : bool, 默认 False。如果 True,则生成的轴将标记为0,1,…,n-1。2.0 版本开始支持。
返回从中删除 NA 项的 DataFrame,如果 inplace=True,则为 None。
df = pd.DataFrame({"name": ['Alfred', 'Batman', 'Catwoman'],
"toy": [np.nan, 'Batmobile', 'Bullwhip'],
"born": [pd.NaT, pd.Timestamp("1940-04-25"),
pd.NaT]})
name toy born
0 Alfred NaN NaT
1 Batman Batmobile 1940-04-25
2 Catwoman Bullwhip NaT
删除至少缺少一个元素的行。
>>> df.dropna()
name toy born
1 Batman Batmobile 1940-04-25
删除至少缺少一个元素的列。
>>> df.dropna(axis='columns')
0 Alfred
1 Batman
2 Catwoman
删除缺少所有元素的行。
>>> df.dropna(how='all')
name toy born
0 Alfred NaN NaT
1 Batman Batmobile 1940-04-25
2 Catwoman Bullwhip NaT
仅保留具有至少2个非NA值的行。
>>> df.dropna(thresh=2)
name toy born
1 Batman Batmobile 1940-04-25
2 Catwoman Bullwhip NaT
定义要在哪些列中查找缺少的值。
>>> df.dropna(subset=['name', 'toy'])
name toy born
1 Batman Batmobile 1940-04-25
2 Catwoman Bullwhip NaT
Series
Series 的 dropna() 方法的语法为:
Series.dropna(
self, axis: Axis = 0,
inplace: bool = False,
how: str | None = None
) -> Series | None:
参数意义为:
- axis:{0 or ‘index’},未使用,是一个固定值,无需传入。与DataFrame兼容所需的参数。
- inplace:bool, 默认值为 False,如果为 True,则原地执行操作并返回 None。
- how:str, 可选:未使用,保持与 DataFrame 对象上的兼容性。
因此,实际使用中 Series 只需要根据需要传入一个 inplace 就可以,并且只能用关键字形式传入。
示例如下。先构造数据:
ser = pd.Series([1., 2., np.nan])
0 1.0
1 2.0
2 NaN
dtype: float64
从序列中删除NA值。
ser.dropna()
0 1.0
1 2.0
dtype: float64
修改原变量中 Series 的内容。
ser.dropna(inplace=True)
0 1.0
1 2.0
dtype: float64
空字符串不被视为NA值。None 被视为 NA 值。
ser = pd.Series([np.NaN, 2, pd.NaT, '', None, 'I stay'])
0 NaN
1 2
2 NaT
4 None
5 I stay
dtype: object
ser.dropna()
1 2
5 I stay
dtype: object
Index
Index 对象的语法是: