pandas系列之数值替换

2,010 阅读2分钟

本文用到的Excel截图如下:

image-20210720230547293.png

数值替换就是将数值A替换成数值B,可以用在异常值处理、缺失值填充处理中。主要包含一对一替换、多对一替换、多对多替换这3种情形。

替换开始前先看一下原始数据结构

import pandas as pd
​
df = pd.read_excel(r'C:\Users\admin\Desktop\测试.xlsx')
print(df)

result:

   姓名     年龄
0  小明   23.0
1  小刚   98.0
2  小红  876.0
3  李华   65.0
4  小美   -6.0
5  张三   34.0
6  李四   13.0
7  王五   98.5

我们可以看到,年龄这一列的876、-6、98.5都是不合理的数组,现在进行替换

1.一对一替换

一对一替换就是将某一块区域中的一个值全部替换成另一个值。

df = pd.read_excel(r'C:\Users\admin\Desktop\测试.xlsx')
print(df['年龄'].replace(-6, 6))

result:

0     23.0
1     98.0
2    876.0
3     65.0
4      6.0
5     34.0
6     13.0
7     98.5
Name: 年龄, dtype: float64

对于有规律的替换对象,可以使用replace方法实现批量替换。

eg:

image-20210720231827092.png

import pandas as pd
​
df = pd.read_excel(r'C:\Users\admin\Desktop\测试.xlsx', sheet_name='Sheet2')
print(df)

result:

   姓名     年龄
0  小明   23.0
1  小刚    NaN
2  小红  876.0
3  李华   65.0
4  小美    NaN
5  张三   34.0
6  李四    NaN
7  王五   98.5

替换后:

import pandas as pd
import numpy as np
​
​
df = pd.read_excel(r'C:\Users\admin\Desktop\测试.xlsx', sheet_name='Sheet2')
print(df.replace(np.NaN, 0))

result:

   姓名     年龄
0  小明   23.0
1  小刚    0.0
2  小红  876.0
3  李华   65.0
4  小美    0.0
5  张三   34.0
6  李四    0.0
7  王五   98.5

有时候需要对全表进行替换,此时replace方法相当于前面缺失值填充的fillna方法(该方法在pandas系列之缺失值的处理|Python 主题月一文中可以看到)

注:np.NaN是python中对缺失值的一种表示方法

2.多对一替换

还是文章开头的表格数据,现在要将年龄这一列的876、-6、98.5这三个数字进行替换

df = pd.read_excel(r'C:\Users\admin\Desktop\测试.xlsx')
print(df.replace([876, -6, 98.5], 25))

result:

   姓名    年龄
0  小明  23.0
1  小刚  98.0
2  小红  25.0
3  李华  65.0
4  小美  25.0
5  张三  34.0
6  李四  13.0
7  王五  25.0

这里是说将[876, -6, 98.5]的值都替换成25

3.多对多替换

多对多替换其实就是某个区域的多个一对一替换。比如将876换成整除10的结果,-6变成相反数,98.5直接保留整数部分

是先对表进行布尔选择选择行,然后通过普通索引选择列

import pandas as pd
​
df = pd.read_excel(r'C:\Users\admin\Desktop\测试.xlsx')
print(df.replace({876: 87, -6: 6, 98.5: 98}))

result:

   姓名    年龄
0  小明  23.0
1  小刚  98.0
2  小红  87.0
3  李华  65.0
4  小美   6.0
5  张三  34.0
6  李四  13.0
7  王五  98.0