假设我在python中有一个列表:a = [1,2,3,4,None]。假设我只想在不等于None的元素上运行sklearn.preprocessing.scale。直接在列表上运行此函数会给出错误消息。
有没有办法做到这一点,而不必手动完成?我想要与pandas中的.fillna()方法类似的功能,您可以在数据框上运行忽略非null元素的函数,然后在以后替换它们。感谢。
答案 0 :(得分:3)
如果你正在使用sklearn
,你可能想要使用numpy数组而不是Python列表:
>>> x = np.array([1, 2, 3, 4, None], dtype=float)
>>> ix = ~np.isnan(x)
>>> x[ix] = sklearn.preprocessing.scale(x[ix])
>>> x
array([-1.34164079, -0.4472136 , 0.4472136 , 1.34164079, nan])
答案 1 :(得分:2)
result = sklearn.preprocessing.scale( filter(None,a) )
应该完全按照您的要求进行(并过滤掉任何虚假值)
请注意,这仅适用于1d列表
我想如果你想让原始列表与标量和非对象一起回来
r = iter(result) #result from above
my_new_a = [None if not v else next(r) for v in a]
答案 2 :(得分:0)
我不熟悉sklearn.preprocessing.scale()
,但似乎for
循环应该有效:
for i in a:
if i is not None:
#your code here#