我有一个pd.Series
和标量值(浮点型和整型)的列表,我想找到其元素级最大值(系列都相同的长度)。如果有一个np.nan
值,则应该使用另一个值(如果只有nan可用,则np.nan
)。只要列表中的序列或值不包含nan值,此方法就可以正常工作,但是如果它们包含nan值,则nan会主导结果序列。
rv = input_list[0]
for s in input_list[1:]:
rv = np.maximum(s, rv)
例如
input_list = [pd.Series([1, 2, 3, 1]), 2, pd.Series([3, 1, np.nan, 4])]
应返回:
pd.Series([3, 2, 3, 4])
如何修改此代码以处理nan值,如果有其他值,则忽略它们?
答案 0 :(得分:1)
numpy.nanmax
您正在寻找numpy.nanmax
。从其文档中:
返回数组的最大值或沿轴的最大值,而忽略任何 NaNs。遇到所有NaN片时,会发出 RuntimeWarning 并为该切片返回NaN。
因此,如果您知道该系列的最大尺寸为n
:
n= 4
result = pd.Series(np.nanmax(
[np.full(n, i) if np.isscalar(i) else i for i in input_list], axis=0))
input_list = [pd.Series([1, 2, 3, 1]), 2, pd.Series([3, 1, np.nan, 4])]
result = pd.Series(np.nanmax(
[np.full(n, i) if np.isscalar(i) else i for i in input_list], axis=0))
输出:
0 3.0
1 2.0
2 3.0
3 4.0
dtype: float64