Pandas使用这些函数处理缺失值:
import pandas as pd
studf = pd.read_excel("../datas/student_excel/student_excel.xlsx",skiprows=2)
studf
| Unnamed: 0 | 姓名 | 科目 | 分数 | |
|---|---|---|---|---|
| 0 | NaN | 小明 | 语文 | 85.0 | 
| 1 | NaN | NaN | 数学 | 80.0 | 
| 2 | NaN | NaN | 英语 | 90.0 | 
| 3 | NaN | NaN | NaN | NaN | 
| 4 | NaN | 小王 | 语文 | 85.0 | 
| 5 | NaN | NaN | 数学 | NaN | 
| 6 | NaN | NaN | 英语 | 90.0 | 
| 7 | NaN | NaN | NaN | NaN | 
| 8 | NaN | 小刚 | 语文 | 85.0 | 
| 9 | NaN | NaN | 数学 | 80.0 | 
| 10 | NaN | NaN | 英语 | 90.0 | 
studf.isnull()
| Unnamed: 0 | 姓名 | 科目 | 分数 | |
|---|---|---|---|---|
| 0 | True | False | False | False | 
| 1 | True | True | False | False | 
| 2 | True | True | False | False | 
| 3 | True | True | True | True | 
| 4 | True | False | False | False | 
| 5 | True | True | False | True | 
| 6 | True | True | False | False | 
| 7 | True | True | True | True | 
| 8 | True | False | False | False | 
| 9 | True | True | False | False | 
| 10 | True | True | False | False | 
# studf["分数"].notnull()#不为空
studf["分数"].isnull()#为空
0 False 1 False 2 False 3 True 4 False 5 True 6 False 7 True 8 False 9 False 10 False Name: 分数, dtype: bool
studf.loc[studf["分数"].notnull(),:]
| Unnamed: 0 | 姓名 | 科目 | 分数 | |
|---|---|---|---|---|
| 0 | NaN | 小明 | 语文 | 85.0 | 
| 1 | NaN | NaN | 数学 | 80.0 | 
| 2 | NaN | NaN | 英语 | 90.0 | 
| 4 | NaN | 小王 | 语文 | 85.0 | 
| 6 | NaN | NaN | 英语 | 90.0 | 
| 8 | NaN | 小刚 | 语文 | 85.0 | 
| 9 | NaN | NaN | 数学 | 80.0 | 
| 10 | NaN | NaN | 英语 | 90.0 | 
studf.dropna(axis="columns",how="all",inplace=True)
studf
| 姓名 | 科目 | 分数 | |
|---|---|---|---|
| 0 | 小明 | 语文 | 85.0 | 
| 1 | NaN | 数学 | 80.0 | 
| 2 | NaN | 英语 | 90.0 | 
| 3 | NaN | NaN | NaN | 
| 4 | 小王 | 语文 | 85.0 | 
| 5 | NaN | 数学 | NaN | 
| 6 | NaN | 英语 | 90.0 | 
| 7 | NaN | NaN | NaN | 
| 8 | 小刚 | 语文 | 85.0 | 
| 9 | NaN | 数学 | 80.0 | 
| 10 | NaN | 英语 | 90.0 | 
studf.dropna(axis="index",how="all",inplace=True)
studf
| 姓名 | 科目 | 分数 | |
|---|---|---|---|
| 0 | 小明 | 语文 | 85.0 | 
| 1 | NaN | 数学 | 80.0 | 
| 2 | NaN | 英语 | 90.0 | 
| 4 | 小王 | 语文 | 85.0 | 
| 5 | NaN | 数学 | NaN | 
| 6 | NaN | 英语 | 90.0 | 
| 8 | 小刚 | 语文 | 85.0 | 
| 9 | NaN | 数学 | 80.0 | 
| 10 | NaN | 英语 | 90.0 | 
studf.fillna({"分数":0},inplace=True)
# 等同于
# studf.loc[;,"分数"] = studf["分数"].fillna(0)
studf
| 姓名 | 科目 | 分数 | |
|---|---|---|---|
| 0 | 小明 | 语文 | 85.0 | 
| 1 | NaN | 数学 | 80.0 | 
| 2 | NaN | 英语 | 90.0 | 
| 4 | 小王 | 语文 | 85.0 | 
| 5 | NaN | 数学 | 0.0 | 
| 6 | NaN | 英语 | 90.0 | 
| 8 | 小刚 | 语文 | 85.0 | 
| 9 | NaN | 数学 | 80.0 | 
| 10 | NaN | 英语 | 90.0 | 
使用前面的有效值填充,用ffill:forward fill
studf.loc[:,"姓名"] = studf["姓名"].fillna(method = "ffill")
studf
| 姓名 | 科目 | 分数 | |
|---|---|---|---|
| 0 | 小明 | 语文 | 85.0 | 
| 1 | 小明 | 数学 | 80.0 | 
| 2 | 小明 | 英语 | 90.0 | 
| 4 | 小王 | 语文 | 85.0 | 
| 5 | 小王 | 数学 | 0.0 | 
| 6 | 小王 | 英语 | 90.0 | 
| 8 | 小刚 | 语文 | 85.0 | 
| 9 | 小刚 | 数学 | 80.0 | 
| 10 | 小刚 | 英语 | 90.0 | 
studf.to_excel("../datas/student_excel/student_excel_clean.xlsx",index=False)