gpt4 book ai didi

python - NaN 污染两个对象 DataFrame 列的 max()

转载 作者:行者123 更新时间:2023-12-01 08:57:43 24 4
gpt4 key购买 nike

如果我取两列 float 的最大值,即使其中一些是 NaN,结果也是相当可预测的:

>>> df = pd.DataFrame({"a": [1.0, 2.0, 3.0, 4.0],
"b": [3, 2, float("nan"), 9]})
>>> df
a b
0 1.0 3.0
1 2.0 2.0
2 3.0 NaN
3 4.0 9.0
>>> df.dtypes
a float64
b float64
dtype: object
>>> df[["a", "b"]].max(axis=1)
0 3.0
1 2.0
2 3.0
3 9.0
dtype: float64

虽然我不确定为什么 3.0 和 NaN 的最大值不是 NaN。

但是,如果列包含非浮点类型(本例中为字符串),NaN 似乎会完全污染结果:

>>> df = pd.DataFrame({"a": ["1", "2", "3", "4"], 
"b": ["3", "2", float("nan"), "9"]})
>>> df
a b
0 1 3
1 2 2
2 3 NaN
3 4 9
>>> df.dtypes
a object
b object
dtype: object
>>> df[["a", "b"]].max(axis=1)
0 NaN
1 NaN
2 NaN
3 NaN
dtype: float64

我预计 max() 调用的输出将为 3, 2, NaN, 9。

最佳答案

您可以告诉 pandas 在获取 .max() 时要包含哪些内容,但只有 floatintboolean 是有效类型。不会进行字符串到数字类型的隐式转换,因此在 df 中,像 "3" 这样的元素不包含在获取最大值中。唯一的数值是 NaN,因此返回。

要获得预期结果,您首先需要将字符串转换为数字类型,例如

df = df.astype(float)

然后提供 skipna=False 以包含 NaN:

df.max(axis=1, skipna=False)

关于python - NaN 污染两个对象 DataFrame 列的 max(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52688836/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com