Найти диапазон всех столбцов (разница между максимумом и минимумом), одновременно корректно обрабатывая строковые столбцы - PullRequest
0 голосов
/ 25 декабря 2018

У меня есть сценарий, в котором я должен найти диапазон всех столбцов в наборе данных, который содержит несколько столбцов с числовым значением, но один столбец имеет строковые значения.Пожалуйста, найдите примеры записей из моего набора данных ниже:

import seaborn as sns
iris = sns.load_dataset('iris')

   sepal_length  sepal_width  petal_length  petal_width species
0           5.1          3.5           1.4          0.2  setosa
1           4.9          3.0           1.4          0.2  setosa
2           4.7          3.2           1.3          0.2  setosa
3           4.6          3.1           1.5          0.2  setosa
4           5.0          3.6           1.4          0.2  setosa

Максимальный и минимальный из этих столбцов даны

sepal_length          7.9
sepal_width           4.4
petal_length          6.9
petal_width           2.5
species         virginica
dtype: object

и

sepal_length       4.3
sepal_width          2
petal_length         1
petal_width        0.1
species         setosa
dtype: object

...соответственно.Чтобы найти диапазон всех столбцов, я могу использовать следующий код:

iris.max() - iris.min()

Но так как столбец 'видов' имеет строковые значения, приведенный выше код выдает следующую ошибку:

TypeError: unsupported operand type(s) for -: 'str' and 'str'

Если вышеописанная ошибка возникает, я хочу напечатать значение как

"{max string value}" - "{min string value}"

IOW, мой ожидаемый результат будет примерно таким:

sepal_length                   3.6
sepal_width                    2.4
petal_length                   5.9
petal_width                    2.4
species         virginica - setosa

Как мне решить эту проблемувопрос

1 Ответ

0 голосов
/ 25 декабря 2018

Обрабатывать числовые и строковые столбцы отдельно.Вы можете выбрать их, используя df.select_dtypes.Наконец, concat результат.

u = Iris.select_dtypes(include=[np.number])
# U = u.apply(np.ptp, axis=0)
U = u.max() - u.min()

v = Iris.select_dtypes(include=[object])
V = v.max() + ' - ' + v.min()

U.append(V)

sepal_length                   3.6
sepal_width                    2.4
petal_length                   5.9
petal_width                    2.4
species         virginica - setosa
dtype: object
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...