❗❗❗本文最后更新于 328 天前,其中的信息可能已经过时;如有错误请在文章下方评论✅,欢迎纠错🥰!
实现拉格朗日插值法中。自定义列向量插值函数时,在取值处应使用基于数字索引的iloc方法;在判断元素是否需要插值时,应使用基于自定义索引的loc方法。
# 销量数据路径
inputFile = '../data/catering_sale.xls'
# 输出数据路径
outputFile = '../tmp/sales.xls'
# 读入数据
data = pd.read_excel(inputFile)
# 过滤异常值,将其变为空值
"""data[u'销量'][(data[u'销量'] < 400) | (data[u'销量']) > 5000] = None 此行为错误代码,小括号将data[u'销量']括起来了"""
data[u'销量'][(data[u'销量'] < 400) | (data[u'销量'] > 5000)] = None # |与OR用法相同 ##正确写法是小括号应将data[u'销量'] > 5000括起来"""
# 自定义列向量插值函数
# s为列向量,n为被插值的位置,k为取前后的数据个数,默认为5
def ployinterp_column(s, n, k = 2):
"""# y = s[list(range(n - k, n)) + list(range(n + 1, n + 1 + k))] # 此行为错误代码 取值方法错误"""
y = s.iloc[list(range(n - k, n)) + list(range(n + 1, n + 1 + k))] #应使用基于数字索引的iloc方法取值
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] = ployinterp_column(data[i], j) # 此行为错误代码 取值方法错误"""
data.loc[j, i] = ployinterp_column(data[i], j) # 正确写法是使用基于自定义索引的loc方法取值
data.to_excel(outputFile)
print("success!")