仅对列表中非空的元素运行函数

时间:2015-11-17 00:02:51

标签: python

假设我在python中有一个列表:a = [1,2,3,4,None]。假设我只想在不等于None的元素上运行sklearn.preprocessing.scale。直接在列表上运行此函数会给出错误消息。

有没有办法做到这一点,而不必手动完成?我想要与pandas中的.fillna()方法类似的功能,您可以在数据框上运行忽略非null元素的函数,然后在以后替换它们。感谢。

3 个答案:

答案 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#
相关问题