使用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
空值处已经插值。