如果我最多使用两列浮点数,即使有些列是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。
答案 0 :(得分:1)
您可以告诉熊猫服用.max()
时要包括什么,但是只有float
,int
和boolean
是有效类型。没有进行字符串到数字类型的隐式转换,因此在df
中,不包含"3"
之类的元素,以获取最大值。唯一的数值是NaN
,因此返回。
要获得预期结果,您首先需要将字符串转换为数字类型,例如
df = df.astype(float)
,然后提供skipna=False
以包括NaN
:
df.max(axis=1, skipna=False)