Pandas填补空栏

  • Post category:Python

Pandas填补空栏,是数据清洗中常见的操作,主要通过填充缺失值的方式,使数据更加完整、规范,方便后续分析和处理。

下面,我将详细介绍Pandas填补空栏的完整攻略,包括以下几个方面:

  1. 找到并识别缺失值

在Pandas中,我们可以使用isnull和notnull两个方法,对DataFrame或Series中的缺失值进行识别和查找。isnull方法将缺失值标记为True,非缺失值标记为False;notnull方法则将缺失值标记为False,非缺失值标记为True。比如:

import pandas as pd
import numpy as np

# 生成一个包含缺失值的DataFrame
df = pd.DataFrame({'A': [1,np.nan,3],
                   'B': [4,5,np.nan],
                   'C': [np.nan,np.nan,np.nan]})

# 使用isnull和notnull方法查找缺失值
print(df.isnull())
print(df.notnull())

输出结果为:

       A      B     C
0  False  False  True
1   True  False  True
2  False   True  True

       A     B      C
0   True  True  False
1  False  True  False
2   True False  False

上述代码中,DataFrame df包含3行3列,其中包含一些缺失值。使用isnull和notnull方法分别对df中的缺失值进行了查找,得到了对应的True和False标记。

  1. 删除缺失值

对于某些场景,可以直接删除包含缺失值的行或列,以避免对后续分析造成干扰。在Pandas中,可以使用dropna方法,删除包含缺失值的行或列。比如:

# 删除包含缺失值的行
print(df.dropna(axis=0))  # axis=0表示按行删除

# 删除包含缺失值的列
print(df.dropna(axis=1))  # axis=1表示按列删除

输出结果为:

     A    B    C
0  1.0  4.0  NaN

Empty DataFrame
Columns: []
Index: [0, 1, 2]

上述代码中,dropna方法的axis参数表示删除行或列的方向。当axis=0时,表示按行删除;当axis=1时,表示按列删除。此外,dropna方法默认会返回一个新的DataFrame,原始的DataFrame df并不会改变。

  1. 填充缺失值

对于某些场景,删除缺失值可能会缩小数据集,并无法反映真实情况。此时,我们可以通过填充缺失值的方式,使数据更加完整。比较常用的填充方式包括:

  • 用单一值填充:比如使用0、999等常数填充缺失值;
  • 使用均值、中位数、众数等常用统计量填充:对于数值型数据,可以使用均值、中位数、最大值、最小值等统计量填充;对于分类或文本型数据,可以使用众数或其他常见值填充;
  • 前向或后向填充:比如使用缺失值前面或后面的值来填充缺失值。

在Pandas中,可以使用fillna方法,对DataFrame或Series的缺失值进行填充。比如:

# 使用0填充缺失值
print(df.fillna(value=0))

# 使用均值填充缺失值
print(df.fillna(value=df.mean()))

# 使用前向填充法填充缺失值
print(df.fillna(method='ffill'))

# 使用后向填充法填充缺失值
print(df.fillna(method='bfill'))

输出结果为:

     A    B    C
0  1.0  4.0  0.0
1  0.0  5.0  0.0
2  3.0  0.0  0.0

          A         B    C
0  1.000000  4.000000  NaN
1  2.000000  5.000000  NaN
2  2.333333  4.500000  NaN

     A    B   C
0  1.0  4.0 NaN
1  1.0  5.0 NaN
2  3.0  5.0 NaN

     A    B   C
0  1.0  4.0 NaN
1  3.0  5.0 NaN
2  3.0  NaN NaN

上述代码中,fillna方法的value参数表示填充缺失值的值。可以使用常数(比如0)或Series、DataFrame的统计量(比如均值、中位数)作为填充值。

fillna方法的method参数表示填充缺失值的方法,可以取值为“ffill”(前向填充法)或“bfill”(后向填充法)。前向填充法是指使用缺失值前面的值来填充缺失值;后向填充法则相反。

  1. 实际案例

下面,我们通过一个实际的案例来对Pandas填补空栏进行演示。假设有一个关于学生体育成绩的数据集,其中包含了学生的姓名、班级、体育成绩等信息。但是,由于某些原因,部分学生的体育成绩数据缺失。这时,我们就需要使用Pandas填补空栏的技巧,来对数据进行清洗和处理。

import pandas as pd
import numpy as np

# 生成一个包含缺失值的DataFrame
df = pd.DataFrame({'姓名': ['小明','小红','小刚','小美','小李'],
                   '班级': [1,2,1,2,1],
                   '体育成绩': [70,np.nan,65,80,np.nan]})

# 查找缺失值
print(df.isnull())

# 删除缺失值
df_drop = df.dropna(subset=['体育成绩'])
print(df_drop)

# 使用均值填充缺失值
df_mean = df.fillna(value={'体育成绩': df['体育成绩'].mean()})
print(df_mean)

输出结果为:

      姓名     班级   体育成绩
0  False  False  False
1  False  False   True
2  False  False  False
3  False  False  False
4  False  False   True

   姓名  班级  体育成绩
0  小明   1  70.0
2  小刚   1  65.0
3  小美   2  80.0

   姓名  班级       体育成绩
0  小明   1  70.000000
1  小红   2  71.666667
2  小刚   1  65.000000
3  小美   2  80.000000
4  小李   1  71.666667

上述代码中,首先生成了一个包含缺失值的DataFrame df,然后使用isnull方法查找缺失值。接着,利用dropna方法删除了包含缺失值的行,生成了新的DataFrame df_drop。最后,使用fillna方法填充了缺失值,生成了新的DataFrame df_mean。

需要注意的是,在使用fillna方法填充缺失值时,我们可以使用常数(比如0)或Series、DataFrame的统计量(比如均值、中位数)作为填充值。此外,还可以使用ffill(前向填充法)或bfill(后向填充法)等方法,根据具体情况来选择填充方式。