Pandas数据处理时,经常需要对空值进行筛选或者过滤,这可以通过DataFrame.dropna()或者
DataFrame.notnull()来实现。
1、函数介绍:
data.dropna(
*,
axis: 'Axis' = 0,
how: 'AnyAll | lib.NoDefault' = <no_default>,
thresh: 'int | lib.NoDefault' = <no_default>,
subset: 'IndexLabel | None' = None,
inplace: 'bool' = False,
ignore_index: 'bool' = False,
) -> 'DataFrame | None'
axis取值0(默认)或者1, how取值any(默认)或者all,后面将参照到函数原型说明 。
2、创建示例数据
首先,我们创建一个示例数据集。使用Pandas创建一个包含空值的数据集如下所示:
import pandas as pd
import numpy as np
technologies= {
'Courses':["ChatGPT","AI","JAVA","Python","SQL",np.nan],
'Fee' :[50000,35000,np.nan,np.nan,np.nan,np.nan],
'Duration':['30days',np.nan,'30days','N/A', np.nan,np.nan]
}
df = pd.DataFrame(technologies)
display(df)
DataFrame数据结果如下:
3、使用 DataFrame.dropna() 过滤具有 nan 值的行:
通过使用方法,可以过滤掉 DataFrame 中具有 nan(不是数字)和 None 值的行。默认情况下,返回的是删除行后的 DataFrame 的副本。
3-1.一行中任意一个元素为nan值的过滤
df2=df.dropna()
print(df2)
执行结果:
axis=0, how='any' 是dropna()调用时的默认值,出现nan或者None的所有行都会被过滤掉。
3-2.一行中所有元素的数据全都是nan值的过滤
那如果是过滤掉值全部是nan的行,就可以使用如下代码:
df3=df.dropna(how='all')
print(df3)
参数how和all在这里,就相当于任意(any)和全部(all)的差别。
3-3、转换到列的话,传入axis=1。如下执行结果:
4、指定某列元素中为空或不空的筛选:
筛选出某列元素中,值不为空的所有行
df[df['Duration'].notnull()]
执行结果:
列元素中出现null的所有行: