【发布时间】:2020-07-26 00:18:29
【问题描述】:
我想创建一个提供输出的列表,如果原始列表有一个空值,它将取相邻值的总和平均值来替换它。假设缺失数据用-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]
请帮忙!
【问题讨论】:
-
你不要试图做你需要做的事情。你有什么问题?
-
嗨帕特里克!我只对列表进行了过滤,如果列表包含 -99,它只返回一个不包括 -99 值的新列表。我无法做的是取平均相邻值(在本例中为值 3 和 5)并将其替换回列表。
-
有很多极端情况需要考虑。如果列表的前 2 个元素是 -99 怎么办?或者如果列表中间有一串连续的 3 个 -99 值怎么办?等
-
@DV82XL 您好,只有当且仅当相邻价格是有效数据时,我们才能用平均值替换缺失的价格。如果我们无法计算平均价格,则缺失的价格将替换为具有有效值的相邻价格。所以我猜如果所有 5 个值都连续 -99,那么可能会返回一个简单的打印指示无法计算
-
如果您的输入列表是
[-99, -99, 3, 4, 5]怎么办?你的预期输出是什么?[1, -99, -99, -99, 5]的输入呢?
标签: python-3.x list filter missing-data