Почему булева фильтрация панд приводит к плавающим значениям? - PullRequest
0 голосов
/ 04 октября 2018

Новичок в пандах, поэтому извиняюсь, если об этом уже спрашивали.

У меня есть следующее:

import pandas as pd

d = {
  'a': [1, 2, 3, 4],
  'b': [1, 2, 3, 4]
}

df = pd.DataFrame(d)

# We want to remove values above 2.
cutoff = 2
boolean_filter = df < cutoff
new_df = df[boolean_filter].dropna()
print(new_df.head())

Насколько я понимаю, панды будут приводить значения, если есть несколько типов.Таким образом, я думал, что присутствие nan приводило к тому, что числа приводились к плавающим числам.

Однако даже после добавления .dropna() полученный DataFrame имеет плавающие числа.

Почему это так и как я могу сохранить значения в виде целых чисел?

Повторная ссылка здесь .

1 Ответ

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

df[boolean_filter] возвращает фрейм данных, содержащий NaN значения:

print(df[boolean_filter])

     a    b
0  1.0  1.0
1  NaN  NaN
2  NaN  NaN
3  NaN  NaN

Этого следует ожидать, так как вы индексируете фрейм данных с булевым 2-мерным массивом.Но NaN значения считаются float, поэтому Pandas должен выгружать все затронутые серии, чтобы продолжать хранить данные в числовых сериях / массивах.

При использовании pd.DataFrame.dropna никакой «пересчет» оптимального типа данных не являетсясрабатывает.Поэтому ваш фрейм данных теперь будет содержать float значений.

Вместо этого, если вы индексируете через одномерный массив, Pandas будет удобно фильтровать по строкам, и вам больше не понадобится dropna:

print(df[boolean_filter.all(1)])

   a  b
0  1  1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...