Aar*_*and 4 python numpy pandas
我有一个列表(或某种类型的数组),其中几乎所有值都在 0 到 1 之间,但我偶尔会有稍微负数或大于 1 的值。
list_values = [-0.01, 0, 0.5, 0.9, 1.0, 1.01]
Run Code Online (Sandbox Code Playgroud)
我想用 0 替换负数,用 1 替换大于 1 的值。
只有 1 个条件,我会这样使用np.where:
arr_values = np.where(pd.Series(list_values) < 0, 0, pd.Series(list_values))
Run Code Online (Sandbox Code Playgroud)
要处理多个条件,我可以定义一个函数,然后使用 lambda 函数应用它:
def change_values(value):
if value < 0:
return 0
elif value > 1:
return 1
else:
return value
series_values = pd.Series(list_values).apply(lambda x: change_values(value=x))
Run Code Online (Sandbox Code Playgroud)
有没有更快的方法来实现这一点?
你想使用np.clip:
>>> import numpy as np
>>> list_values = [-0.01, 0, 0.5, 0.9, 1.0, 1.01]
>>> arr = np.array(list_values)
>>> np.clip(arr, 0.0, 1.0)
array([0. , 0. , 0.5, 0.9, 1. , 1. ])
Run Code Online (Sandbox Code Playgroud)
如果您可以忽略转换为数组的成本,这可能是最快的方法。对于较大的列表/数组,应该会好得多。
pandas除非您最终想要一个 Pandas 数据结构,否则参与此操作不是可行的方法。