处理数据框中的缺失值是数据分析过程中非常重要的一步。Pandas 提供了多种方法来处理缺失值,包括删除含有缺失值的行或列、填充缺失值以及插值等方法。
一、删除含有缺失值的行或列
适用场景:缺失值比例较低时(例如 <5%),可以直接删除。数据集较大且删除后不会显著影响数据分布。
1.删除含有任何缺失值的行
clean_data = data.dropna() #删除包含任何缺失值的行
2.删除所有缺失值的列
cleaned_data = data.dropna(axis=1) #删除包含任何缺失值的列
axis
:用于指定操作的方向(行或列)。0
(默认):对列操作1
:对行操作
3.按条件删除
cleaned_data = data.dropna(subset=['x', 'y']) #只删除在 'x' 和 'y' 列中有缺失值的行
subset
:一个列表,用于指定只考虑数据框中的某些列来判断是否包含缺失值。
二、填充缺失值
1.使用常量值填充
df_filled_fixed = df.fillna(0, inplace=True) #使用0填充缺失值
inplace
:用于控制是否直接修改原始数据结构。True
:直接在原始数据结构上进行修改,不会返回新的对象。False
(默认值):不会修改原始数据结构,而是返回一个新的对象,原始数据保持不变。
2.统计值填充
数据近似正态分布时,适合用均值或中位数填充。
分类变量适合用众数填充。
(1)均值填充
df_fill_mean = df.fillna(df.mean()) # 使用每列的均值填充
(2)中位数填充
df_fill_median = df.fillna(df.median()) # 使用每列的中位数填充
(3)众数填充
df_fill_mode = df.fillna(df.mode().iloc[0]) # 使用每列的众数填充
3.使用前向或后向填充
(1)前向填充
df_ffill = df.fillna(method='ffill', inplace=True) #使用前一行的值填充
(2)后向填充
df_bfill = df.fillna(method='bfill', inplace=True) #使用后一行的值填充
三、插值法填充
适用于时间序列数据或有序数据中缺失值的填补。
df_interpolated = df.interpolate(method='linear') # 线性插值
method='nearest'
:最近邻插值method='polynomial'
:多项式插值