首页 > 解决方案 > 如何在中间有 nan 的列表中找到最小和最大元素

问题描述

我有一个数据框,其中有一个名为“score”的列。我正在将该列中的所有元素提取到一个列表中。它之间有'nan's。我希望在每个“nan”发生之前确定元素的最小值和最大值。

我正在考虑将列转换为列表,并遍历列表直到遇到“nan”。但是我如何在nan之前遍历找到最小和最大元素?

这是我编写的将数据框的列转换为列表然后识别“nan”的代码。

score_list = description_df['score'].tolist()
for i in score_list:
    print(i)
    if math.isnan(i):
        print("\n")

假设我的数据看起来像这样,

 11.03680137760893
 5.351482041139766
 10.10019513222711
 nan
 0.960990030082931
 nan
 6.46983084276682
 32.46794015293125
 nan

然后,我应该能够在第一个“nan”出现之前将 max 标识为 11.03680137760893,将 min 标识为 5.351482041139766,将 0.960990030082931 标识为第二个 nan 出现之前和第一个 nan 出现之后的最小值和最大值,以及 32.46794015293125 作为最大值和6.46983084276682 在第二个“nan”之后和第三个“nan”之前的 min

标签: python-3.xpandasdataframe

解决方案


您可以创建两个名为minmax的变量,每次找到 nan 并打印(或存储)它们时,它们都以默认值开头。

import sys

score_list = description_df['score'].tolist()
max = sys.float_info.min
min = sys.float_info.max
for i in score_list:
    print(i)
    if math.isnan(i):
        print("max =", max, "min =", min, "\n")
        max = sys.float_info.min
        min = sys.float_info.max
    else:
        if i > max:
            max = i
        if i < min:
            min = i

推荐阅读