Python 3.x python3如何创建一个检查空值并取相邻值的平均值来替换空值的列表?

Python 3.x python3如何创建一个检查空值并取相邻值的平均值来替换空值的列表?,python-3.x,list,filter,missing-data,Python 3.x,List,Filter,Missing Data,我想创建一个列表,它给出一个输出,如果原始列表有一个空值,它将取相邻值的总和平均值来替换它。假设缺少的数据用-99表示 def clean_missing_data(): data_list = [] for number, adjacent in enumerate(a): if (number != -99): data_list.append(number)

我想创建一个列表,它给出一个输出,如果原始列表有一个空值,它将取相邻值的总和平均值来替换它。假设缺少的数据用-99表示

def clean_missing_data():
    
    data_list = []
    
    for number, adjacent in enumerate(a):
        
        if (number != -99):

            data_list.append(number)
            
        else:
            
            adjacent_left = a[number-1]
            adjacent_right = a[number+1]
            fill_in = (adjacent_left + adjacent_right) / 2    
            data_list.append(fill_in)
    
    return data_list

a = [1,2,3,-99,5]

check_data = clean_missing_data()

print('original test case:', a)
print('After clearing, the test case became:', check_data)
输出

original test case: [1, 2, 3, -99, 5]
After clearing, the test case became: [0, 1, 2, 3, 4]

例如,对于该测试用例,缺失值是列表的第四个数字(用-99表示),这意味着列表取相邻数据的总和平均值;输入值3和5,并将其替换回列表

本质上,它的意思是:[1,2,3,(3+5)/2,5]


请帮忙

要求有点不清楚,所以我不能100%确定这是否符合您的要求,但这是我目前最好的猜测

def get_right_编号(编号,i):
“”“用于搜索右侧第一个有效数字的递归函数”“”
如果i>=len(数字)-1:
右=-99
其他:
右=数字[i+1]
如果右==-99:
右=获得正确的数字(数字,i+1)
返回权
def clean_缺少_数据(数字):
打印(f'输入:{numbers}')
如果全部(x==-99表示数字中的x):
print('列表中的所有值都无效。无法计算')
返回
清洁编号=[]
对于范围内的i(len(数字)):
如果数字[i]!=-99:
清除编号。追加(编号[i])
其他:
有效计数=0
如果i==0:
左=0
其他:
左=清洁编号[i-1]
有效计数+=1
右=获得正确的数字(数字,i)
如果右==-99:
右=0
其他:
有效计数+=1
平均值=(左+右)/有效计数
清除编号。追加(平均值)
打印(f'输出:{clean_numbers}\n')
返回干净的号码
以下是我的测试用例(打印嵌入在上面的clean方法中):

clean\u缺少数据([1,2,3,4,5])
清除缺少的数据([1,2,3,-99,5])
清除丢失的数据([-99,2,3,4,5])
清除丢失的数据([-99,-99,3,4,5])
清除缺少的数据([1,2,3,4,-99])
清除缺少的数据([1,2,3,-99,-99])
清除缺少的数据([1,-99,-99,-99,5])
清除缺少的数据([-99,-99,-99,-99,-99])
以下是产出:

输入:[1,2,3,4,5]
输出:[1,2,3,4,5]
输入:[1,2,3,-99,5]
输出:[1,2,3,4.0,5]
输入:[-99,2,3,4,5]
输出:[2.0,2,3,4,5]
输入:[-99,-99,3,4,5]
输出:[3.0,3.0,3,4,5]
输入:[1,2,3,4,-99]
输出:[1,2,3,4,4.0]
输入:[1,2,3,-99,-99]
输出:[1,2,3,3.0,3.0]
输入:[1,-99,-99,-99,5]
输出:[1,3.0,4.0,4.5,5]
输入:[-99,-99,-99,-99,-99]
列表中的所有值都无效。
请注意,当您有一个无效数字字符串时,我们将获取最右边的有效数字,并取其平均值。这个新的平均值将被考虑到下一个数字的计算中,等等。它执行一种插值,但严格来说它不是线性插值。如果没有完整的要求,现在就必须这样做(按时并在预算内!)


如果您需要更改需求,您可以调整上面的代码,直到所有测试用例都满足您的需要。我也相信有一种更干净的方法可以做到这一点,但我会让你自己去弄清楚。祝你好运

您混淆了变量
number
相邻的
。约定是将
枚举(a)
返回
索引作为数组中的位置,将
元素作为元素本身。在这种情况下,您的代码将变为

def clean_缺少数据():
数据列表=[]
对于索引,枚举(a)中的元素:
如果(元素!=-99):
数据列表。追加(元素)
其他:
相邻左=a[索引-1]
相邻的右=a[索引+1]
填充=(左邻接+右邻接)/2
数据列表。追加(填写)
返回数据列表
a=[1,2,3,-99,5]
检查\u数据=清除\u缺少\u数据()
打印('原始测试用例:',a)
打印('清除后,测试用例变为:',检查数据)
它给出了
[1,2,3,4.0,5]
,其中4.0当然等于4


您确实需要了解代码仍然存在一些问题。如果第一个或最后一个数字是-99怎么办?如果两个相邻的数字是-99怎么办?但这至少应该适用于你给出的例子

你不会试图做你需要做的事情。你怎么了?嗨,帕特里克!我只对列表进行了筛选,如果列表包含-99,它只返回一个不包含-99值的新列表。我不能做的是取平均相邻值(在这种情况下,值3和5),并将其替换回列表。如果列表的前两个元素是-99呢?或者如果你在列表中间有3个连续的99个值怎么办?等@DV82XL Hi,只有当且仅当相邻价格为有效数据时,我们才能用平均值替换缺失的价格。如果我们无法计算平均价格,则缺失的价格将替换为具有有效值的相邻价格。所以我猜如果所有5个值都是-99,那么可能会返回一个简单的打印,指示无法计算。如果您的输入列表是
[-99,-99,3,4,5]
?您的预期输出是什么?输入
[1,-99,-99,-99,5]
怎么样?