Python数据清洗之缺失值与异常值处理(五)

本文介绍Python数据清洗的三种核心方法:删除缺失值、填充默认值和数据插补。通过实例展示了如何使用pandas库的dropna()和fillna()函数处理缺失数据,并介绍了拉格朗日插值法进行数据插补,适用于数据预处理和分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python数据清洗之缺失值处理(五)


处理缺失值方法有三类:

  1. 删除缺失值
  2. 填充默认值
  3. 数据插补
    原始数据:
    |  |  ||--|--||  |  |

删除缺失值

使用dropna()删除数据中的空值。

import pandas as pd
import os
input_file = os.getcwd() + '\data\catering_sale.xls'
output_file = os.getcwd() + '\data\sales.xls'
data = pd.read_excel(input_file,encoding = 'utf-8')
print(data.dropna())

运行结果:

          日期      销量
0  2015-03-01    51.0
1  2015-02-28  2618.2
2  2015-02-27  2608.4
3  2015-02-26  2651.9
4  2015-02-25  3442.1
5  2015-02-24  3393.1
6  2015-02-23  3136.6
7  2015-02-22  3744.1
8  2015-02-21  6607.4
9  2015-02-20  4060.3
10 2015-02-19  3614.7
11 2015-02-18  3295.5
12 2015-02-16  2332.1
13 2015-02-15  2699.3
15 2015-02-13  3036.8
16 2015-02-12   865.0
17 2015-02-11  3014.3
18 2015-02-10  2742.8

已经删除缺失值。

填充默认值

使用fillna()函数填充一个默认数据。

import pandas as pd
import os
input_file = os.getcwd() + '\data\catering_sale.xls'
output_file = os.getcwd() + '\data\sales.xls'
data = pd.read_excel(input_file,encoding = 'utf-8')
print(data.fillna(0))

运行结果:

           日期      销量
0  2015-03-01    51.0
1  2015-02-28  2618.2
2  2015-02-27  2608.4
3  2015-02-26  2651.9
4  2015-02-25  3442.1
5  2015-02-24  3393.1
6  2015-02-23  3136.6
7  2015-02-22  3744.1
8  2015-02-21  6607.4
9  2015-02-20  4060.3
10 2015-02-19  3614.7
11 2015-02-18  3295.5
12 2015-02-16  2332.1
13 2015-02-15  2699.3
14 2015-02-14     0.0
15 2015-02-13  3036.8
16 2015-02-12   865.0
17 2015-02-11  3014.3
18 2015-02-10  2742.8

已经将缺失值填充为0.

数据插补

一般采用插值法,包含拉格朗日插值法、牛顿插值、Hermite插值、分段插值、样条插值等。在Python的Scipy库中,只提供了拉格朗日插值的函数 ,因此我们只重点讲解拉格朗日插值方法(学编程数学一定要学好==)。

import pandas as pd
from scipy.interpolate import lagrange
import os
input_file = os.getcwd() + '\data\catering_sale.xls'
output_file = os.getcwd() + '\data\sales.xls' #输出数据路径
data = pd.read_excel(input_file,encoding = 'utf-8') #读入数据
data[u'销量'][(data[u'销量']<400) | (data[u'销量']>5000)] = None #过滤异常值,将其变为空值
#s为列向量,n为被插值位置,k为取前后的数据个数
def ployinter(s,n,k=5):
	y = s[list(range(n-k,n)) + list(range(n+1,n+1+k))]
	y = y[y.notnull()] #剔除空值
	return lagrange(y.index,list(y))(n)
#逐个元素判断是否需要插值
for i in data.columns:
	for j in range(len(data)):
		if(data[i].isnull())[j]:
			data[i][j] = ployinter(data[i],j)
print(data[u'销量'])
data.to_excel(output_file)

运行结果:

1     2618.200000
2     2608.400000
3     2651.900000
4     3442.100000
5     3393.100000
6     3136.600000
7     3744.100000
8     4275.254762
9     4060.300000
10    3614.700000
11    3295.500000
12    2332.100000
13    2699.300000
14    3831.099225
15    3036.800000
16     865.000000
17    3014.300000
18    2742.800000
Name: 销量, dtype: float64

空值处已经插值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智能驾驶小管家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值