NaN загрязняющий max () двух столбцов объекта DataFrame - PullRequest
0 голосов
/ 07 октября 2018

Если я возьму максимум двух столбцов с плавающей точкой, даже если некоторые из них являются 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.

1 Ответ

0 голосов
/ 07 октября 2018

Вы можете указать пандам, что включать в принятие .max(), но только float, int и boolean являются допустимыми типами.Неявное преобразование строк в числовые типы не выполняется, поэтому в df такой элемент, как "3", не учитывается при получении максимума.Единственное числовое значение - NaN, которое, таким образом, возвращается.

Чтобы получить ожидаемый результат, сначала необходимо преобразовать строки в числовой тип, например,

df = df.astype(float)

, а затем предоставитьskipna=False для включения NaN:

df.max(axis=1, skipna=False)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...