Python 为什么numpy max函数(np.max)返回错误的输出?

Python 为什么numpy max函数(np.max)返回错误的输出?,python,pandas,numpy,Python,Pandas,Numpy,我有pandas数据帧,我将其转换为numpy ndarray。我对数据帧中的一列使用max函数,如下所示: print('column: ',df[:,3]) print('max: ',np.max(df[:,3])) 结果是: column: [0.6559999999999999 0.48200000000000004 0.9990000000000001 ..., 1.64 nan 0.07] max: 0.07 但正如您所看到的,例如,第一个值大于0.07!! 问题出在哪里?np

我有
pandas数据帧
,我将其转换为
numpy ndarray
。我对数据帧中的一列使用
max
函数,如下所示:

print('column: ',df[:,3])
print('max: ',np.max(df[:,3]))
结果是:

column: [0.6559999999999999 0.48200000000000004 0.9990000000000001 ..., 1.64 nan 0.07]
max: 0.07
但正如您所看到的,例如,第一个值大于0.07!!
问题出在哪里?

np.max是函数np.amax的别名,根据文档,它不能很好地处理NaN值。要忽略NaN值,应使用np.nanmax

这里有两个问题

  • 看起来您试图为其查找最大值的列的数据类型为
    对象
    。如果您确定列中应该包含数字数据,则不建议这样做,因为它可能会导致不可预测的行为,而不仅仅是在这种特殊情况下。请检查您的数据帧的数据类型(您可以通过键入
    df.dtypes
    )并更改它,使其与您期望的数据相对应(对于这种情况,
    df[column\u name].astype(np.float64)

  • 您不希望在包含NAN的数组上使用
    np.max



  • 解决方案

  • 如果确定列的数据类型为
    对象

    1.1。您可以使用级数的max方法,它应该将数据转换为自动浮动

    df.iloc[3].max()

    1.2。只能为nanmax函数将数据强制转换为propper类型

    np.nanmax(df.values[:,3].astype(np.float64)

    1.3您可以从dataframe中删除所有nan并查找max[不推荐]:

    np.max(test_data[column_name].dropna().values)
    
    df[column_name] = df[column_name].astype(np.float64)
    
    np.nanmax(df.values[:,3])
    

  • 如果您的数据类型为float64,且不应为
    对象
    数据类型[推荐]:

    np.max(test_data[column_name].dropna().values)
    
    df[column_name] = df[column_name].astype(np.float64)
    
    np.nanmax(df.values[:,3])
    


  • 用于说明问题的代码

    返回:

    ********Using np.max function********
    Max of objects array: 0.07
    Max of floats array: nan
    
    ********Using max method of series function********
    Max of objects array: 1.64
    Max of floats array: 1.64
    

    你能把df[:,3]存储到一个单独的数据框中并找到它的最大值吗?对我来说,它似乎起作用了,但它仍然不起作用。如果可能的话,你能给我指出整个df吗?整个df还是第三列?你也可以使用df.iloc[3].max()如果符合您的需要,则使用numpys函数进行替换。这是一个很好的假设,但不是正确的答案。看起来真正的问题与不正确的数据类型有关。如numpy.amax文档中所述,如果数组中存在nan,则amax返回nan,但在这种情况下并非如此。有一个讨论扩展了q再补充一点: