Использование среза и логического индекса в одном выражении iloc - PullRequest
0 голосов
/ 29 сентября 2018

«Python для анализа данных» (ch5) использует двойной выбор:

data.iloc[:,:3][data.three>5]

Нет объяснения логики этого утверждения.Как это следует понимать?

Это выборка по сравнению с предыдущим выбором, то есть data.iloc[:,:3] сначала выбирает все строки и первые три столбца, затем [data.three>5] уменьшает этот выбор до всех строк, для которых значения в столбце«три» больше 5?

Я также видел следующее выражение:

df[['CoCode','Doc_Type','Doc_Nr','Amount_LC']][df['Amount_LC']>1000000000]

Я немного растерялся.Похоже, loc и iloc можно использовать с двойным выбором, т. Е. df.loc[][] Какова логика второго []?Что идет в первом и во втором?

Ответы [ 3 ]

0 голосов
/ 30 сентября 2018

iloc и loc принимают 2 параметра, столбцы и строки.

data.iloc[<row selection> , <column selection>]

Надеюсь, это помогло.

0 голосов
/ 30 сентября 2018

Это выборка по сравнению с предыдущей выборкой, т.е. data.iloc [:,: 3] сначала выбирает все строки и первые три столбца, затем [data.three> 5] уменьшает этот выбор до всех строк, для которыхзначения в столбце «три» больше 5?

Да, @ rahlf23 имеет отличное объяснение.

Похоже, что loc и iloc могут использоваться с двойным выбором, т.е. df.loc [] [] какова логика второго []?Что идет в первом и во втором?

Даже вы можете сделать тройной или более выбор из строк .Пример:

df = pd.DataFrame({'a':[1,2,3,4,5], 'b':[6,7,8,9,10], 'c': [11,12,13,14,15]})

# It will give you first 3 rows of column a and b
df.loc[:,:2][:4][:3]

# It will give you {'a':[2,3], 'b':[7,8]}
df.iloc[:,:2][df.a*7 > df.c][:2]

# It will give you error, you can't slice more on columns
df.iloc[:,:2][:3,:1]
0 голосов
/ 30 сентября 2018

Здесь применяются два отдельных выбора для фрейма данных data:

1) data.iloc[:,:3] выбирает все строки и все столбцы до (но не включая) индекса столбца 3, таким образом, индексы столбца 0, 1 и 2

2) Фрейм данных data ограничен всеми строками, где столбец three содержит значения больше 5

Вывод этих двух выборов не зависит от упорядочения,поэтому:

data.iloc[:,:3][data.three>5] == data[data.three>5].iloc[:,:3] вернет кадр данных, заполненный True

Обратите внимание, что здесь вы не используете двойной выбор (как вы его называете), а скорее запрашиваете конкретные строки истолбцы в вашем первом выборе, в то время как ваш второй выбор - просто фильтр, примененный к кадру данных, возвращенному вашим первым выбором.

Фактически, вы используете .iloc() для выбора определенных местоположений индекса (или срезов) в кадре данных., в то время как .loc() позволяет выбирать определенные местоположения на основе меток столбцов и строк.

Наконец, когда вы фильтруете какой-либо кадр данных с чем-токак data[data.three>5], вы можете прочитать это как «Возвращать строки в фрейме данных data, где столбец three этой строки имеет значение больше 5».

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