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)
)
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])
对象
数据类型[推荐]:
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再补充一点: