如何获取pandas DataFrame列非零值的浮点型最小值与最大值
问题原因
minValue返回Series是因为你写的df[df['col1']>0.1]是做完行筛选后的整个DataFrame,直接对整个表调.min(),pandas会把所有数值列的最小值都算出来,返回的是各列最小值组成的Series,当然不是单个float。
你写的maxValue能返回float,是因为df['col2']已经选中了单独一列的Series对象,再调.max()自然返回单个数值。
正确写法
筛选行的时候直接指定要计算的目标列就行,返回结果默认就是float类型:
# 计算col1里大于0.1的数值的最小值 minValue = df.loc[df['col1'] > 0.1, 'col1'].min() # 如果你的需求是严格排除零值(不是筛大于0.1),把过滤条件换成!=0即可 # minValue = df.loc[df['col1'] != 0, 'col1'].min() # 你原来写的col2求最大值的逻辑本身没问题,要排除零值的话按上面的逻辑改就行 maxValue = df['col2'].max()
边界情况处理
要是筛选完之后目标列一个有效值都没有,.min()/.max()会返回NaN,需要兜底默认值的话可以提前判断:
valid_col1_data = df.loc[df['col1'] > 0.1, 'col1'] # 无有效数据时默认返回0.0,兜底值可以按自己需求改 minValue = valid_col1_data.min() if not valid_col1_data.empty else 0.0
内容的提问来源于stack exchange,提问作者Marvy
相关产品推荐
相关产品推荐

