Страницы

Поиск по вопросам

среда, 26 февраля 2020 г.

Как применить метод any(), all()?

#python #pandas #dataframe #numpy


Pandas ​предоставляет инструменты свертки структур данных для получения сводной
информации. Для выполнения операции “логическое ИЛИ” по строкам(​axis​=​1) или столбцам(по
умолчанию или ​axis​=​0) используется метод ​any(), аналогично “логическое И” - метод
all().​ Если у меня есть таблица: 

import pandas as pd
import numpy as np
tab1 = pd.DataFrame(np.array([[1,2,3],[10,20,30]]))
    0   1   2
0   1   2   3
1   10  20  30


Дальше я проверяю элементы таблицы на условие tab1[tab1>2].
Получаю:

    0   1   2
0   NaN NaN 3
1   10.0    20.0    30


tab1>2

     0      1       2
0   False   False   True
1   True    True    True


Свертка по столбцам (tab1 ​>​​2).any():

0    True
1    True
2    True
dtype: bool


Свертка по строкам (tab1 ​>​​2).any(axis = 1)

0    True
1    True
dtype: bool


Как получить сводную таблицу, использую метод any(), all()? Как этот метод применить
практически? Пока я только получила логические переменные в DataFrame.    Вариант с
маской не срабатывает:

#по столбцам
maska3 = (tab1>2).all(axis = 0)
tab1[maska3]
/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:2: UserWarning: Boolean
Series key will be reindexed to match DataFrame index.


0   1   2


А должен вывести последний столбец.
    


Ответы

Ответ 1



In [7]: tab1.loc[:, (tab1 > 2).all()] Out[7]: 2 0 3 1 30 Пояснение: DataFrame для примера: In [15]: df = pd.DataFrame(np.array([[1,2,3],[10,20,30]]), columns=list("abc")) In [16]: df Out[16]: a b c 0 1 2 3 1 10 20 30 Оператор DataFrame[arg] - пытается угадать тип индексирования/фильтрования. Если в качестве аргумента передан вектор булевых значений, длина которого совпадает с числом строк DataFrame, значит пользователь фильтрует строки, использую "булеву максу". In [17]: df[[True, False]] Out[17]: a b c 0 1 2 3 В противном случае пользователь пытается выбрать столбцы DataFrame: In [19]: df["a"] Out[19]: 0 1 1 10 Name: a, dtype: int32 In [20]: df[["a", "c"]] Out[20]: a c 0 1 3 1 10 30 Для более тонкой/гибкой выборки лучше использовать selector's: DataFrame.loc[, ] - selection by label DataFrame.iloc[, ] - selection by position

Комментариев нет:

Отправить комментарий