两个对象DataFrame列的最大值()

2024-03-28 11:27:31 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我取两列浮点的最大值,即使有些是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。你知道吗


Tags: 类型dataframedfobjectnanfloatmax浮点
1条回答
网友
1楼 · 发布于 2024-03-28 11:27:31

您可以告诉熊猫在获取^{}时包含什么,但只有floatintboolean是有效类型。没有将字符串隐式转换为数字类型,因此在df中,像"3"这样的元素不包括在取最大值中。唯一的数值是NaN,因此返回。你知道吗

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

df = df.astype(float)

然后提供skipna=False以包含NaN

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

相关问题 更多 >