Pandas缺失值处理

准备数据

有空行,空列的数据

Pandas对缺失值的处理

Pandas使用这些函数处理缺失值

  • isnull 和 notnull:检测是否是空值,可用于df和series
  • dropna:丢弃,删除缺失值
  1. axis:删除行还是列,{0 or 'index', 1 or 'columns'}, default 0
  2. how:如果等于any则任何值为空都删除,如果等于all则所有值都为空才删除
  3. inplace:如果为True则修改当前df,否则返回新的df
  • fillna:填充空值
  1. value:用于填充的值,可以是单个值,或者字典(key是列名,value是值)
  2. method:等于ffill使用前一个不为空的值填充forward fill; 等于bfill使用后一个不为空的值填充backword fill
  3. axis:按行还是列填充,{0 or 'index', 1 or 'columns'}
  4. inplace:如果为True则修改当前df,否则返回新的df

例子:特殊Excel的读取,清洗,处理

1.  读取excel的时候,忽略前几个空行

import pandas as pd

file_path = r'C:\TELCEL_MEXICO_BOT\A\student.xlsx'
studf = pd.read_excel(file_path,skiprows=2) 

注意:skiprow=2表示读取时先略过前两行,因为excel中的前两行是空的,然后会从第三行开始读取

print(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

2. 检查空值

print(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
print(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
print(studf['分数'].notnull())
0      True
1      True
2      True
3     False
4      True
5     False
6      True
7     False
8      True
9      True
10     True
Name: 分数, dtype: bool
  • 筛选没有空分数的所有行
print(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

3. 删除全是空值的列

# axis='columns'  按列进行删除
# how='all' 如果这一列所有字段全是空值,就将这列删除
# inplace=True 直接修改这个df, 本例中直接修改studf

studf.dropna(axis='columns', how='all', inplace=True)
print(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

4. 删除全是空值的行

studf.dropna(axis='index', how='all', inplace=True)
print(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

5. 将分数列为空的值填充为0分

a = studf.fillna({'分数':0})
print(a)
     姓名  科目    分数
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

6. 将姓名的缺失值进行填充

# 姓名列中为空的替换为指定字符串 未知,
# 分数列中为空的替换为 0
df_filled = studf.fillna({'姓名': '未知', '科目': '未知', '分数': 0})
print(df_filled)
    姓名  科目    分数
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

使用前面的有效值填充,用ffill:forward fill

studf['姓名'] = studf['姓名'].fillna(method='ffill')
studf = studf.fillna({'分数':0})
print(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

7. 将清洗好的excel保存

studf.to_excel(r'C:\TELCEL_MEXICO_BOT\A\student_Clean.xlsx', index=False)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值