Pandas填补空栏,是数据清洗中常见的操作,主要通过填充缺失值的方式,使数据更加完整、规范,方便后续分析和处理。
下面,我将详细介绍Pandas填补空栏的完整攻略,包括以下几个方面:
- 找到并识别缺失值
在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标记。
- 删除缺失值
对于某些场景,可以直接删除包含缺失值的行或列,以避免对后续分析造成干扰。在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并不会改变。
- 填充缺失值
对于某些场景,删除缺失值可能会缩小数据集,并无法反映真实情况。此时,我们可以通过填充缺失值的方式,使数据更加完整。比较常用的填充方式包括:
- 用单一值填充:比如使用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”(后向填充法)。前向填充法是指使用缺失值前面的值来填充缺失值;后向填充法则相反。
- 实际案例
下面,我们通过一个实际的案例来对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(后向填充法)等方法,根据具体情况来选择填充方式。