Подбора: Подбор слов

Содержание

Хантфлоу — идеальная программа для эффективной работы отдела подбора

Хантфлоу — идеальная программа для эффективной работы отдела подбора

C Хантфлоу подбор персонала становится быстрым и удобным

Заказать персональную презентацию

Только в Хантфлоу

Впервые в мире!

Готовая интеграция
с Telegram

Готовая интеграция
с WhatsApp

Готовая интеграция
с Viber

Встроенный почтовый клиент HuntMail

для переписки с кандидатами

Встроенный почтовый

для переписки

с кандидатами

Работает с любой почтой

Переписка с кандидатами прямо из Хантфлоу

  • Отправка писем
  • Получение писем
  • Ответы на полученные письма
  • Добавление коллег в копию
  • Отображение писем цепочкой
  • Прикрепление файлов
  • Шаблоны
  • Вся переписка в одном удобном месте
  • Подпись
  • Подключение нескольких адресов

Распознавание резюме из pdf, doc и rtf

Технология HuntParse™ точно распознает текст резюме и фотографию кандидата даже из PDF.

Сохранение резюме с джоб-сайтов

Одним нажатием сохраняйте резюме с HeadHunter, SuperJob, LinkedIn, GitHub и других сайтов.

Работает во всех современных браузерах

Определение дубликатов резюме

Хантфлоу следит за похожими резюме по фамилии, дате рождения, эл. почте, телефону и другим комбинациям. При объединении сохраняет всю информацию из обоих резюме.

Закажите презентацию Хантфлоу

Заказать персональную презентацию

Приглашение заказчиков прямо в Хантфлоу

Показывайте кандидатов заказчикам прямо в Хантфлоу. Никаких лишних скачиваний и пересылок резюме. Обсуждение сохранится в карточке кандидата.

Количество заказчиков неограниченно в любом тарифе

Ведение вакансий по вашему процессу

Берите кандидата в работу по вакансии и ведите его по этапам подбора. Вся история работы по вакансии будет сохранена.

Заказать персональную презентацию

Назначение собеседований в ваш календарь

Назначайте собеседования с коллегами в ваш календарь за секунды. Хантфлоу автоматически прикрепит кандидата, вакансию и резюме в приглашение участникам.

Интеграция с вашим календарем

Письма кандидатам по шаблонам

Создайте шаблоны писем, приглашений, отказов и отправляйте письма кандидатам в два счета. Имя, эл. почта, вакансия, время собеседование и др. подставится автоматически.

Отчет по вакансиям, рекрутерам и источникам

Показывает точные показатели по вакансиям, рекрутерам и источникам. Помогает оценить эффективность подбора и планировать бюджет.

Формируется автоматически в формате экселя

Заказать презентацию

Хантфлоу использует файлы cookies. Если вы согласны с использованием cookies, нажмите «Я согласен» или отключите cookie в вашем браузере. Узнать, какие данные и как мы используем, можно в нашей политике конфиденциальности

Я согласен

ГОСТ 27006-86 Бетоны. Правила подбора состава, ГОСТ от 25 марта 1986 года №27006-86


ГОСТ 27006-86

Группа Ж13

БЕТОНЫ

ПРАВИЛА ПОДБОРА СОСТАВА

Сoncretes. Rules for mix proportioning

МКС 91.100.30
ОКП 58 7000

Дата введения 1987-01-01

Постановлением Государственного комитета СССР по делам строительства от 25 марта 1986 N 31 дата введения установлена 01.01.87

ПЕРЕИЗДАНИЕ. Август 2006 г.

Настоящий стандарт распространяется на конструкционные тяжелый, легкий, ячеистый и плотный силикатный бетоны по ГОСТ 25192-82 и устанавливает правила подбора, назначения и выдачи в производство состава бетона на предприятиях и строительных организациях при изготовлении сборных бетонных и железобетонных изделий и конструкций и бетонной смеси для монолитных конструкций и сооружений (далее — конструкции), а также при обосновании производственно-технических норм расхода материалов.

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

1. ОБЩИЕ ПОЛОЖЕНИЯ


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

1.2. Подбор состава бетона включает в себя определение номинального состава, расчет и корректировку рабочего состава, расчет и передачу в производство рабочих дозировок.

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

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

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

1.5. Рабочую дозировку назначают по рабочему составу бетонной смеси с учетом объема приготовляемого замеса.

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

Допускается производить подбор состава бетона в центральных лабораториях, трестах «Оргтехстрой», научно-исследовательских лабораториях и других организациях по утвержденному заданию на подбор состава бетона.

1.7. Результаты подбора номинального состава бетона, отвечающего требованиям утвержденного задания, должны быть оформлены в журнале подбора состава бетона и утверждены главным инженером предприятия — изготовителя бетонной смеси. Рабочие составы и дозировки подписываются начальником лаборатории или другим лицом, ответственным за подбор состава бетона.

1.8. Задание, журнал подбора номинального состава бетона, ведомости рабочих составов и листы рабочих дозировок вместе с дубликатами документов о качестве на соответствующие партии бетонной смеси или конструкций должны храниться на предприятии-изготовителе согласно требованиям, установленным ГОСТ 13015.3-81 для документа о качестве.

2. ЗАДАНИЕ НА ПОДБОР СОСТАВА БЕТОНА

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

2. 2. Задание должно содержать:

нормируемые показатели качества бетона в соответствии с техническими требованиями стандартов, технических условий или проектной документации на конструкции конкретных видов, для которых предназначен бетон;

показатели качества бетонной смеси, длительность и режимы твердения бетона и другие условия производства, принимаемые по технологической документации, разработанной в соответствии с действующими стандартами, нормами и правилами;

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

ограничения по составу бетона и применению материалов для его приготовления, установленные нормативно-технической и технологической документацией.

2.3. Состав бетона следует подбирать исходя из среднего уровня прочности, а для легкого и ячеистого — и плотности бетона.

Значения среднего уровня прочности и плотности для подбора состава бетона принимают по ГОСТ 18105-86 и ГОСТ 27005-86 с учетом фактической однородности бетона и планируемых мероприятий по ее повышению.

Для случаев, когда отсутствуют данные о фактической однородности бетона, средний уровень прочности при подборе его состава принимают равным требуемой прочности по ГОСТ 18105-86 для бетона данного класса или марки при коэффициенте вариации, равном 13,5% для тяжелого и легкого бетонов, 14% — для плотного силикатного бетона и 17% — для ячеистого, а также бетона массивных гидротехнических конструкций. Средний уровень плотности в этих случаях принимают равным марке бетона по плотности.

3. ПОДБОР НОМИНАЛЬНОГО СОСТАВА БЕТОНА

3.1. Подбор номинального состава бетона производят по следующим этапам:

выбор и определение характеристик исходных материалов для бетона;

расчет начального состава;

расчет дополнительных составов бетона с параметрами составов, отличающихся от принятых в начальном составе в большую и меньшую сторону;

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

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

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

3.2. Подбор номинального состава производят:

для вяжущего каждого вида и марки каждого предприятия-изготовителя;

для крупного заполнителя каждого карьера с одинаковой максимальной крупностью;

для крупного пористого заполнителя каждой марки по насыпной плотности и прочности каждого предприятия-изготовителя;

для песков каждого карьера;

для химических добавок каждого вида.

3.3. Выбор материалов, применяемых для изготовления бетона, следует производить на основе их паспортных характеристик в соответствии с требованиями стандартов и технических условий.

При выборе материалов следует учитывать необходимость наиболее полного использования промышленных отходов (зол, шлаков и золошлаковых смесей ТЭС и др.).

3.4. Материалы, применяемые для подбора состава, должны соответствовать требованиям стандартов или технических условий на эти материалы. До начала работы по расчетам состава бетона и приготовлению опытных замесов следует провести испытания материалов по соответствующим стандартам для определения показателей их качества, необходимых для проведения расчетов.

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

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

Допускается активность цемента для расчета состава бетона принимать равной его гарантированной марке. В этом случае при получении новой партии цемента в целях его использования в соответствии с фактической активностью рабочий состав бетона (в части расхода цемента) подбирают аналогично номинальному.

3.5. Пробы материалов отбирают в объеме, необходимом для подбора состава бетона.

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

3.6. Начальный состав бетона рассчитывают по фактическим характеристикам исходных материалов в соответствии с методиками, пособиями и рекомендациями научно-исследовательских институтов, утвержденных в установленном порядке.

3.7. В качестве варьируемых параметров состава принимают параметры, оказывающие влияние на свойства бетонной смеси и нормируемые показатели качества бетона в зависимости от вида бетона и принятой методики расчета. Например, для тяжелого бетона в общем случае это цементно-водное отношение, доля песка в смеси заполнителей и расход добавки. При этом для каждого вида бетона устанавливают основной параметр, в большей мере влияющий на его прочность (например, для тяжелого бетона — цементно-водное отношение).

3.8. Дополнительные составы рассчитывают аналогично начальному при значениях варьируемых параметров состава, отличающихся от принятых при расчете начального состава в меньшую и большую сторону на 15-30%. Количество дополнительных составов по каждому из этих параметров должно быть не менее двух.

3.9. Опытные замесы по начальному и дополнительным составам следует приготовлять на заполнителях и вяжущем, характеристики которых были приняты при расчете составов. Материалы должны иметь положительную температуру.

Объем каждого опытного замеса должен не менее чем на 10% превышать суммарный объем изготовляемых из него образцов и проб, используемых для контроля свойств бетонной смеси и бетона.

3.10. Материалы следует дозировать по массе с погрешностью не более 1,0%.

Дозирование пористых заполнителей допускается производить по объему с обязательным контролем насыпной плотности.

Воду, водные растворы добавок и синтетические смолы дозируют по массе или объему. Плотность водного раствора рабочего состава добавки должна быть предварительно определена.

3.11. Приготовление опытных замесов производят в лабораторном смесителе принудительного или гравитационного действия. Приготовление опытных замесов объемом до 15 л при подборе состава тяжелого бетона и легкого бетона без структурообразующих добавок допускается производить вручную на предварительно увлажненном противне с перемешиванием в течение 3-5 мин.

3.12. Приготовление опытных замесов начинают с перемешивания сухих материалов, а затем постепенно добавляют в замес назначенное по расчету количество воды, раствора добавки или синтетической смолы.

Допускается на основе визуального контроля удобоукладываемости и структуры бетонной смеси вносить изменения в количество отдозированной воды, а для конструкционно-теплоизоляционных легких бетонов — в количество воздухововлекающей добавки или пены.

3.13. После окончания перемешивания отбирают пробы по ГОСТ 10181-2000 для проверки удобоукладываемости и других свойств бетонной смеси, предусмотренных в техническом задании на подбор состава бетона. При этом определение удобоукладываемости начинают не ранее 15 мин после начала перемешивания смеси с водой.

Если свойства бетонной смеси не соответствуют каким-либо требованиям задания на подбор состава бетона, следует произвести корректировку составов до получения в замесе каждого состава смеси с заданными свойствами.

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

3.14. После получения бетонной смеси с заданными свойствами определяют ее плотность по ГОСТ 10181-2000 (за исключением ячеистого бетона) и для каждого состава рассчитывают фактический расход материалов на 1 м бетона по формулам:

; (1)

; (2)

; (3)

, (4)

где , , и — расход соответственно цемента, мелкого заполнителя, крупного заполнителя и воды, кг/м бетона;

, , , — масса соответственно цемента, мелкого заполнителя, крупного заполнителя и воды в замесе, кг;

— плотность бетонной смеси, кг/м;

— суммарная масса всех материалов в замесе, кг

3. 15. Из общего числа составов бетона, рассчитанных по п.3.14 для каждого из принятых в расчете значений основного параметра, выбирают составы с минимальной водопотребностью или расходом вяжущего, изготовляют контрольные образцы бетона этих составов и определяют прочность бетона по ГОСТ 10180-90.

Режим твердения образцов должен соответствовать принятому режиму твердения бетона в конструкциях, для которых произведен подбор состава бетона.

3.16. По результатам испытаний бетонной смеси и бетона рассчитанных составов устанавливают необходимые зависимости свойств бетонной смеси от параметров состава или (и) расхода материалов, а также строят график зависимости прочности бетона от основного параметра.

Указанные зависимости и график используют в дальнейшем для назначения и корректировки рабочих составов.

3.17. По графику зависимости прочности бетона от основного параметра определяют значение этого параметра, соответствующего прочности бетона, указанной в задании на подбор его состава, пересчитывают состав бетона исходя из найденного значения основного параметра и проверяют его соответствие всем другим нормируемым показателям качества (например, плотности, водонепроницаемости, морозостойкости и др. ).

При положительных результатах испытаний подобранный состав бетона принимают за номинальный.

В случаях, когда подбираемый состав бетона отвечает требованиям по прочности и не отвечает каким-либо другим требованиям задания на подбор состава, следует произвести новый подбор состава с применением технологических приемов, обеспечивающих получение всех требуемых показателей качества бетона, как правило, без увеличения расхода цемента.

3.18. Подбор состава бетона с целью обоснования производственных норм расхода материалов производят для условий производства и по материалам, показатели качества которых соответствуют средним значениям применяемых материалов и условий производства за период не менее 6 мес., предшествующих времени подбора состава.

4. НАЗНАЧЕНИЕ И КОРРЕКТИРОВКА РАБОЧИХ СОСТАВОВ БЕТОННЫХ СМЕСЕЙ


4.1. Назначение нового рабочего состава бетонной смеси производят, если по данным входного контроля установлено изменение качества поступивших материалов по сравнению с применяемыми ранее более чем на:

2,5 МПа — фактической прочности цемента, характеризуемой в соответствии с п. 3.4;

1,5 абс.% — нормальной густоты цементного теста;

1,5 абс.% — содержания илистых, глинистых и пылевидных частиц;

50 кг/м — насыпной плотности пористого заполнителя.

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

2 абс.% — содержания песка в щебне или щебня в песке;

0,5 абс.% — влажности заполнителей;

2 см или 5 с — осадки конуса или жесткости бетонной смеси.

Корректировку производят также, если:

фактическая прочность бетона ниже требуемой или выше верхней предупредительной границы по ГОСТ 18105-86;

фактическая плотность легкого и ячеистого бетонов выше требуемой по ГОСТ 27005-86.

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

При этом расход заполнителей и воды в рабочем составе с учетом фактической влажности заполнителей и содержания крупного заполнителя в мелком и мелкого заполнителя в крупном определяют по формулам:

; (5)

; (6)

; (7)

, (8)


где — расход заполнителей, кг/м;

— расход воды, кг/м;

— влажность по массе i-й фракции заполнителя, %;

— расход по номинальному составу сухого заполнителя -й фракции, кг/м;

— расход воды по номинальному составу, кг/м;

, — расход песка и крупного заполнителя, кг/м, с учетом содержания песка в крупном заполнителе () и крупного заполнителя в песке (), в долях от массы;

, — расход песка и крупного заполнителя по номинальному составу, кг/м.

5. ПЕРЕДАЧА НА ПРОИЗВОДСТВО РАБОЧИХ ДОЗИРОВОК


5.1. Дозировки материалов (цемента, заполнителей, воды и добавки) рассчитывают по формуле

(9)


где — доза i-го материала по массе, кг, или объему, м;

— расход i-го материала в рабочем составе по массе, кг/м, или объему, м/м;

— объем замеса, м, и заносят в журнал подбора составов.


5.2. Лаборатория предприятия — изготовителя бетонной смеси передает на производство дубликат дозировки из журнала подбора состава по каждому рабочему составу бетона. Каждый дубликат дозировки должен быть подписан начальником или другим ответственным лицом лаборатории.



Электронный текст документа
подготовлен АО «Кодекс» и сверен по:

официальное издание
М: Стандартинформ, 2006

На смену арене приходит режим подбора

Недавно мы объявили, что на смену арене уже совсем скоро придёт режим подбора. Изучив ваши комментарии к объявлению, мы решили оставить арену доступной до запуска бета-тестирования нового режима. В этой статье директор проекта Джейсон Слама рассказывает о преимуществах и недостатках арены и режима подбора, а также об устройстве нового режима.

К арене у нас был ряд претензий:

Нельзя было выбирать украшения

Казалось бы, что мешало нам это исправить? Да просто не позволял текущий интерфейс, а раз уж мы и так знали, что будем переделывать режим с нуля, то решили подождать. В режиме подбора интерфейс будет соответствовать нашим текущим стандартам качества, так что в нём точно можно будет выбрать украшения.

Игра требовала затрат

В режиме арены мы последовали традициям индустрии и ввели систему билетов в расчёте, что их стоимость окупится наградами за успехи в игре. Из-за этого арена до недавнего времени не была связана с обычными системами продвижения. На наш взгляд, это ненужный барьер для игроков, которые предпочитают такой режим обычному режиму создания колоды.

Именно поэтому мы решили сделать участие в режиме подбора бесплатным. Следовательно, поначалу не будет и наград за продвижение. Не знаем, порадует вас это или расстроит, но надеемся на ваше понимание. Рано или поздно это должно было случиться.

Сложно для тех, кто играет на досуге

Соревновательный элемент ГВИНТА отлично проявляется в рейтинговом режиме и на ранге Pro, а в дополнительном режиме игры он нам кажется лишним. Мы посчитали, что дополнительные штрафы за проигрыш матчей только заставляют переживать при подборе соперника — в первую очередь это касается новичков. Мы не хотим, чтобы в этом режиме опасались участвовать.

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

Подробнее о том, что мы запланировали для этого формата, расскажем в другой раз.

Подбор колоды

Прежде чем приступить к разбору того, что нам не нравилось в режиме арены, хотим отметить, что арена разрабатывалась ещё до выхода версии Homecoming, когда стоимости найма ещё не существовало. Со дня открытия арены алгоритм подбора карт не менялся. Мы считаем, что он устарел и плохо сочетается с картами, представленными в новых дополнениях ГВИНТА.

Для начала вспомним, что нам в арене нравилось.

———— Что нам нравилось ————

1. Отсутствие ограничений по фракциям. В колодах, состоящих из карт нескольких фракций, доступны сочетания, которых нельзя достичь в обычном режиме. Без ограничений по фракциям открывается много новых возможностей.

Это не изменится.

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

Это тоже не изменится.

3. Учёт премиальных карт на арене. Если у вас в коллекции есть премиальная версия той или иной карты, на арене эта карта тоже будет премиальной. Благодаря этому у тех, кто интересуется прежде всего режимом подбора, есть хоть какой-то стимул собирать анимированные карты.

Это тоже не изменится.

———— Что нам не нравилось ————

А теперь вспомним, что в текущей системе подбора карт нам не нравилось.

1. Слишком долгое создание колоды. Кто-то из игроков был готов тратить на подбор карт для колоды сколько угодно времени, но многие из нас предпочли бы немного ускорить этот процесс.

Перед игрой на арене игроку требовалось принять 26 решений (25 карт и выбор способности лидера), а теперь понадобится всего 11. Это в два раза меньше, чем раньше, и к тому же вы сможете выбрать стратегический приём.

2. Требования к сочетаемости карт. Многие карты, такие как Ян Наталис, было рискованно выбирать в самом начале: если вам не выпадала хоть одна приличная карта военного искусства, он оказывался совершенно бесполезен.

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

3. Собранные колоды сильно различались по уровню силы. Конечно, колебания в силе колоды — это неудивительно, но на арене они были слишком заметны. Из-за этого игры сводились не к мастерству, а к удаче.

Мы не стремимся сделать собранные колоды одинаковыми по силе, но хотим заметно повысить нижнюю планку. Вероятность того, что колода получится совершенно бесполезной и без сочетаний, сильно уменьшится. При этом мы рассчитываем, что случайность всё равно будет играть не последнюю роль, ведь так интереснее. Это значит, что в одних подборах игрокам будет везти больше, чем в других. Кроме того, мы стараемся увеличить значимость мастерства и сделать так, чтобы принятые решения влияли на следующие варианты выбора.

4. Многие способности лидера не подходят для колоды из случайных карт. Вне режима подбора действие этих способностей ограничено картами соответствующей фракции. Если же в вашей колоде собраны все фракции, эти способности вряд ли вам пригодятся.

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

5. Некоторые карты просто не подходят для режима подбора. Речь о тех, чья способность срабатывает при условии, которое сложно выполнить при случайном подборе карт. К ним относится и карта «Выходной день Лавка».

Но не отчаивайтесь! Лавк вернётся с уникальной для режима подбора способностью лидера, с которой вам не придётся соблюдать сложные условия при создании колоды.

———— Наборы из 3 карт ————

А теперь давайте подробнее рассмотрим, как устроена система подбора в новом одноименном режиме.

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

Во-первых, игроку придётся принимать значительно меньше решений и, соответственно, тратить меньше времени на подбор карт для колоды.

Во-вторых, так мы сможем предлагать готовые сочетания карт. Это снизит вероятность того, что колода будет состоять из несочетаемых карт-одиночек. Старина Ян Наталис ещё повоюет!

В-третьих, предлагаемые карты будут так или иначе связаны, а значит, игроки смогут узнать больше об архетипах и категориях в ГВИНТЕ. К примеру, игроку может выпасть набор категории «Прокрутка» из трёх Всадников Дикой Охоты — так игрок познакомится с таким понятием, как прокрутка.

Эти наборы карт скомпонованы вручную и не включают в себя все доступные в ГВИНТЕ карты. Это не только экономит время, но и позволяет нам регулировать алгоритм подбора вплоть до мельчайших подробностей, а также даёт возможность вводить и убирать те или иные материалы.

———— Как предлагаются наборы карт ————

Наш алгоритм подбора основан на системе взвешенной случайности. При выборе предлагаемых наборов у каждого набора своя вероятность. Допустим, есть два набора — один с весом в 3 единицы, а другой с весом в 1 единицу. Это значит, что вероятность предложения первого набора в три раза выше, чем второго.

Кроме того, вес тоже может меняться по ходу подбора карт. Фактически это значит, что ваши предыдущие решения влияют на вероятность того, что далее вам предложат тот или иной набор карт. Так, если вы выбрали нильфгаардскую способность лидера, вам с большей вероятностью попадётся набор с особыми картами тактики.

Сложнее всего будет найти золотую середину — не основываться исключительно на предыдущих решениях игрока, но и не предлагать каждый раз слишком очевидные варианты.

А ещё у нас есть возможность делать те или иные предлагаемые наборы недоступными, а при необходимости снова добавлять их в список предлагаемых карт. Так, если вы не выберете что-нибудь, связанное с Детьми Огня, — например, способность лидера «Священное братство» — вам просто не предложат этот набор.

———— О балансе наборов ————

При создании набора карты распределяются по трём ячейкам — верхней, средней и нижней. Карты, предлагаемые в каждой ячейке, могут различаться. Набор может состоять из трёх одинаковых карт — например, Всадников Дикой Охоты. Как правило, в верхней ячейке набора находится золотая карта, а в остальных двух — бронзовые. В средней ячейке иногда может оказаться и недорогая золотая карта.

Поскольку большинство наборов содержат одну золотую и две бронзовые карты, количество золотых и бронзовых карт в колодах почти всегда будет относительно равным. Есть вероятность, что вам предложат очень редкий набор — например, набор для прокрутки с тремя Панталонами — однако она очень мала. В среднем в ходе подбора вы увидите два-три таких набора.

Кроме того, мы можем делать такие наборы недоступными для повторного предложения. Так, если вы выберете набор из трёх Панталонов, то алгоритм больше не предложит вам ни его, ни набор с тремя Плотвами.

———— Категории ————

Наборы карт разделены на восемь категорий. Сначала алгоритм подбора выбирает три категории, а затем случайным образом генерирует наборы этих категорий. Это намного важнее, чем абсолютная цельность категорий. Если не делить наборы карт на категории, вероятность того, что при подборе вам предложат сразу три полезных варианта выбора, устремится к нулю. Именно поэтому при размещении наборов алгоритм решает, как они повлияют на вероятность выбора.

Следует отметить, что выбор предложенных игроку категорий тоже обусловлен динамической взвешенной случайностью. Это значит, что наборы одних категорий будут появляться значительно реже других. Кроме того, у некоторых категорий вероятность появления снижается с каждым разом, когда вы выбираете набор этой категории.

Давайте взглянем на категории, которые мы придумали, и соответствующие им наборы карт. Хочу напомнить, что всё это может измениться.

Механика: эти наборы основаны на основной механике, которую нельзя отнести к другим категориям.

Примеры: гармония, монеты, перемещение, приказ, сотворение, завещание, вероломство.

Общность: у карт в этих наборах общая категория. Обычно эти наборы недоступны по умолчанию. Когда ваши решения при подборе указывают на то, что те или иные наборы отсюда могут пригодиться, они становятся доступными.

Примеры: дриады, Дикая Охота, корабли и пираты, эльфы, друиды, Невидимые, солдаты, аристократы.

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

Примеры: кровотечение, блокировка, награда за голову, яд, атака.

Вомбо-комбо: эти наборы будто бы собраны вручную. Карты в них очень ценные и, как правило, им не нужны другие карты, чтобы принести много очков. Это самая редкая категория наборов, так что не рассчитывайте собрать колоду целиком из них.

Примеры: три Камби, три случайных Геральта, Хозяйки Леса, Дилла и Мастер рун.

Защита: карты в этих наборах рассчитаны на защиту ваших отрядов от преждевременной гибели. Пока что алгоритм не допускает добавления в колоду второго защитника, однако не исключено, что это изменится.

Примеры: Сукрус, щит, броня, усиление, защитник.

Очки: карты в этих наборах помогут накопить как можно больше очков.

Примеры: предварительное усиление (усиление карт в колоде и руке), большая сила, загромождение поля, Дети Огня, сбережение.

Особый: в этих наборах собраны особые карты, которые разделены на категории. Сюда же входят карты, с помощью которых можно сыграть особую карту.

Примеры: природа, органика, алхимия, набег, преступления, тактика, военное искусство.

Прокрутка: карты в этих наборах призывают карты из колоды. Такие наборы собраны вручную. Так, в Синих Полосках первой картой может быть «Роше: беспощадный», а вместе с ним — карта «Синие Полоски: боец».

Примеры: Хороший мальчик Панталон, Туманник, Бригада «Импера», Синие Полоски, Щитоносцы.

На момент написания статьи мы собрали 79 наборов карт в восьми категориях. Как правило, в пределах одного предлагаемого набора генерируется бесчисленное множество сочетаний карт. Со временем мы планируем вводить новые предлагаемые наборы и убирать существующие. Словом, предложенные вам в ходе подбора карты и итоговые колоды всегда будут сильно различаться.

За редким исключением, в каждой ячейке появляется одна из восьми доступных в конфигурации карт.

———— Основные карты и способности лидера ————

Наш план на будущее — включить в режим подбора новые способности лидера. Прежде чем ими заняться, мы решили подождать и посмотреть, как за время открытого бета-тестирования изменится конфигурация режима подбора. При этом мы уверены, что для нового режима неплохо подходят как минимум четыре способности каждой фракции.

В начале подбора игроку предлагается выбрать из трёх золотых карт — это так называемые основные карты. В наборах, которые будут предложены после, они недоступны. Получить одну из них можно только на этом этапе.

Среди прочих, к основным картам относятся динамические карты и сценарии. Впрочем, это не только легендарные карты. На первый взгляд может показаться, что одна основная карта другой рознь, но все они имеют для подбора огромное значение. Основная карта влияет на доступные наборы карт и вероятность их выпадения, а значит, к концу подбора в колоде почти наверняка появятся мощные сочетания с этой картой.

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

———— Порядок подбора ————

Итак, подбор будет выглядеть так:

способность лидера -> основная карта -> восемь наборов по три карты -> стратегический приём.

Основную карту и способность лидера вы выбираете в первую очередь, чтобы потом ориентироваться на них при подборе карт.

———— И напоследок ————

У нас ещё множество планов на режим подбора. Мы хотим добавить какую-то систему прогресса — возможно, в виде MMR — и дать игрокам дополнительный стимул побеждать в новом режиме. Кроме того, не исключено, что мы добавим возможность менять карты в колоде по мере продвижения в игре — скорее всего, после сыгранного матча.

Возможно, в новом режиме нужно будет подождать, прежде чем приступить к подбору новой колоды. Мы не хотим, чтобы игроки раз за разом подбирали себе колоду в надежде собрать лучшее сочетание. Надеемся, в новом режиме подбора вам и не захочется этого делать: неудачные колоды, с которыми вообще нет смысла играть, останутся в прошлом.

Мы продолжим работу над алгоритмом подбора, чтобы играть стало ещё интереснее, а старые и новые игроки открыли для себя ГВИНТ с новой стороны.

ДомКлик запускает единый сервис подбора жилья в новостройках по всей России — Новости

С 1 июля ДомКлик от Сбербанка запускает сервис подбора недвижимости в новостройках по всей России — от Калининграда до Владивостока. Сервис позволяет ипотечным клиентам получить скидки до 10% на квартиры в новостройках от ведущих застройщиков.

После одобрения заявки на ипотеку на DomClick.ru или в отделении Сбербанка клиент заполняет форму подбора недвижимости, где указывает предпочтения по стоимости и расположению жилья, инфраструктуре и образу жизни.

Смарт-поиск формирует список подходящих предложений от проверенных застройщиков со скидкой до 10% и отправляет клиенту в чат личного кабинета. Прямо в чате клиент может позвонить или написать застройщику, чтобы забронировать квартиру со скидкой.

К сервису онлайн-подбора недвижимости уже подключились более 700 крупнейших застройщиков России и предлагают клиентам квартиры в почти 1 000 жилых комплексах.

🔘 «Сбербанк создает новые возможности дистанционного подбора новостроек. Сервис не только удобен в использовании, но и позволяет приобрести квартиру на наиболее выгодных условиях у аккредитованных, а значит проверенных застройщиков. Вместе с финансовой поддержкой Сбербанка клиент получает квалифицированную подборку квартир, а также электронную регистрацию сделки в Росреестре, что приобретает особую ценность в современных реалиях жизни», — комментирует Наталья Кондратова, директор по продажам и маркетингу ООО «Катрина Инвест» (ЖК бизнес-класса «Ольга»), Владивосток.

🔘 «Благодаря ДомКлик наши клиенты дистанционно могут получить подборку вариантов недвижимости, составленной профессионалами и соответствующей пожеланиям клиентов по площади и ценовому диапазону. Данная платформа помогает покупателям сделать правильный выбор и приобрести квартиру мечты!», — отмечает руководитель отдела продаж ООО «Кетом» Валерия Головкова, Хабаровск.

🔘 «Сервис подбора объектов недвижимости ДомКлик помогает нашим клиентам выбрать нужную квартиру, а для нас является ценным каналом продаж. Мы давно и успешно используем цифровые сервисы ДомКлик, и новый сервис подбора не стал исключением. Наши менеджеры оперативно реагируют на обращения клиентов через ДомКлик, в режиме онлайн готовы провести показ и обсудить все детали. Мы гибко и индивидуально подходим к каждому клиенту, ДомКлик помогает организовать процесс удобно и комфортно для наших клиентов», — говорит Светлана Сибилькова, заместитель руководителя группы компаний «ЛУГ», Псков.

Выбрать подходящую квартиру со скидкой от застройщика и оформить ипотеку можно онлайн на DomClick.ru


Сейчас читают

Более 1000 клиентов воспользовались сервисом подбора недвижимости в новостройках

Рынок недвижимости после режима самоизоляции: новые возможности и стратегии

Как купить квартиру в новостройке в ипотеку

Система автоматизированного подбора моторных масел из линейки Hi-Gear

SMART CHOICE : Об алгоритме подбора масла

Первый этап подбора масла производится по литровой мощности двигателя*, поскольку этот ‎удельный параметр является характеристикой уровня форсирования двигателя и, соответственно, ‎отражает степень тепловых и механических нагрузок, как на пары трения, так и на само моторное ‎масло. Таким образом, чем выше литровая мощность двигателя, тем выше должны быть ‎эксплуатационные характеристики применяемого масла. Указанный критерий подбора ‎применяется на основе фундаментального комплекса научных, экспериментальных, практических ‎и нормативных данных в сфере эксплуатации автомобильных двигателей и потому обеспечивает ‎надежный подбор масла при минимуме исходных данных (достаточно указать мощность и ‎рабочий объем двигателя**).‎

Второй этап предусматривает подбор летнего класса SAE (вязкости масла при 100°С) на основе ‎системного анализа трех критериев: степени износа двигателя, регламентированного ‎производителем летнего класса SAE, фактически применяемого масла («фактического» летнего ‎класса SAE). Для каждой комбинации указанных параметров программа определяет необходимую ‎оптимальную вязкость масла при 100°С, по ней подбирает соответствующий летний класс SAE и по ‎последнему непосредственно само масло. В программе заложен принцип – чем выше износ ‎двигателя, тем более вязкое масло ему необходимо (более высокий летний класс SAE) с целью ‎обеспечения достаточной несущей способности масляного слоя в увеличенном зазоре между ‎деталями.

Третий этап предусматривает подбор зимнего класса SAE по минимальной температуре при ‎холодном пуске двигателя. ‎

Примечание: расчет степени износа двигателя производится по ‎эмпирической зависимости от пробега, рабочего объема, расхода топлива и расхода масла на ‎угар.‎


* Литровую мощность двигателя определяют путем деления мощности двигателя (л.с.) на рабочий ‎объем двигателя (литр). Получается значение в размерности (л.с./литр). Напомним, что 1 литр = 1 ‎дм3 = 1000 см3

** Это сумма рабочего объема всех цилиндров двигателя. Иногда ее называют литражом ‎двигателя. Рабочий объем одного цилиндра – это объем, освобождаемый поршнем при его ‎перемещении из верхней мертвой точки в нижнюю мертвую точку.‎

закрыть

Подбор кондиционера онлайн. Калькулятор подбора кондиционера по параметрам

Не знаете как выбрать кондиционер?

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

Калькулятор подбора кондиционера

Fujitsu поддерживает ваше стремление к комфорту и совершенствованию климата вокруг себя. Для того чтобы помочь вам при выборе современной и энергоэффективной системы кондиционирования подходящей под ваши индивидуальные условия эксплуатации, Fujitsu предлагает воспользоваться легким и простым калькулятором подбора кондиционера онлайн. При помощи нашего онлайн калькулятора вам не составит труда подобрать кондиционер для любого пипа помещения, от спальни до серверной.


Подбор кондиционера по параметрам

Выбор мощности сплит-системы Fujitsu напрямую зависит от характеристик помещения, в котором планируется установка кондиционера. Исходя из параметров площади помещения, квадратуре, высоты потолков, количества людей, окон и суммарной нагрузки от работающих электроприборов программа подбора кондиционера производит расчет приблизительной требуемой производительности сплит-системы и на основе результата предлагает подходящее решение.

* чтобы произвести подбор сплит-системы по парметрам, заполните все поля формы.

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

Наша программа по подбору сплит-системы поможет вам в выборе кондиционера для помещений различного назначения.

  • Для спальни. Бесшумные сплит-системы настенного типа с функцией «режим сна», плавно меняющей температуру в помещении на время сна, обладающие фильтрами тонкой очистки воздуха.
  • Для квартиры. Настенные кондиционеры, имеющие режим повышенной производительности и экономичный режим расхода электроэнергии за счёт ограничения максимальной мощности.
  • Для загородного дома. Кассетные, подпотолочные и канальные высоконапорные кондиционеры, способные эффективно работать как на охлаждение, так и на обогрев при низких температурах без потери мощности.

Как подбор персонала изменится в будущем

Откликаясь на вакансию, соискатели ожидают беспроблемного взаимодействия с компанией в цифровом формате. При этом для большинства такое взаимодействие – необходимое условие, а не ключевой решающий фактор, стимулирующий желание работать в вашей компании. Нормальное человеческое взаимодействие на протяжении всего процесса всегда производит более сильное впечатление.

Кандидаты хотят получить положительный опыт непосредственного общения с людьми в ходе рекрутингового процесса, будь то лично, по телефону или по электронной почте. А во время собеседования желание получить такой опыт только возрастает. Две трети респондентов считают, что персонализированный начальный контакт повышает вероятность того, что они откликнутся на вакансию. А при обсуждении условий или принятии официальных предложений, по мнению опрошенных, предпочтительнее личные встречи или телефонные звонки, чем автоматизированные технологии, такие как чатботы.

Внесем ясность: технологии играют и должны играть важную роль в процессе подбора персонала. Но ориентируйтесь на их человеческую составляющую. Например, когда соискатели ждут отклика со стороны специалиста по подбору кадров, то предпочитают получать его по электронной почте или телефону, нежели через чатботы или автоматизированные звонки, то есть от человека, а не машины.

При выборе технологий учитывайте впечатления соискателя. Рекрутинговые технологии, как правило, разрабатываются и выбираются для предприятия, а не для кандидата. Выбирайте решения, которые позволяют оптимизировать повседневные задачи или упрощают процессы найма для соискателей; 44% участников опроса заявили, что вполне приемлют автоматизацию и использование технологий в шаблонных процедурах взаимодействия и для получения информации в ходе рекрутингового процесса. При этом 65% респондентов высказались за наличие в компаниях информационной панели («дэшборда») для соискателей, при помощи которой можно отслеживать, на каком этапе процесса они сейчас находятся.

Нужно найти оптимальное сочетание технологий и человеческого взаимодействия. Например, в PwC мы стали иногда проводить собеседования по видеосвязи с целью придания большей гибкости процессу найма для соискателей. При этом мы активно и часто общаемся с кандидатами и создаем возможности для личного взаимодействия: проводим очные собеседования на заключительных этапах подбора или приглашаем их посетить один из наших офисов чтобы пообщаться лично и посмотреть, как у нас работается.

Еще одно направление применения технологий при подборе кадров – интерактивные технологии, которые помогают соискателям лучше понять, что из себя представляет работа в вашей компании. Представьте, что при помощи виртуальной реальности можно смоделировать процесс работы на предлагаемой должности или офисную среду. Инвестиции в такие решения могут окупиться: 65% соискателей с большей вероятностью рассмотрят должность, если у них будет возможность узнать, что она из себя представляет при помощи технологий. Виртуальная реальность особенно заманчива для 64% востребованных специалистов, при этом 55% выразили заинтересованность в геймифицированных, интерактивных собеседованиях.

Selection — Веб-API | MDN

A Selection Объект представляет диапазон текста, выбранный пользователем, или текущую позицию курсора. Чтобы получить объект Selection для изучения или изменения, вызовите window.getSelection () .

Пользователь может сделать выбор слева направо (в порядке документа) или справа налево (в обратном порядке в документе). Якорь — это место, где пользователь начал выбор, а фокус — это место, где пользователь заканчивает выбор.Если вы делаете выбор с помощью настольной мыши, привязка размещается там, где вы нажали кнопку мыши, а фокус помещается в то место, где вы отпустили кнопку мыши.

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

Selection.anchorNode Только чтение
Возвращает Узел , в котором начинается выбор.Может возвращать null , если выделение никогда не существовало в документе (например, iframe, по которому никогда не нажимали).
Selection.anchorOffset Только чтение
Возвращает число, представляющее смещение привязки выделения в пределах anchorNode . Если anchorNode является текстовым узлом, это количество символов в anchorNode, предшествующих привязке. Если anchorNode является элементом, это количество дочерних узлов anchorNode , предшествующих привязке.
Selection.focusNode Только чтение
Возвращает Узел , на котором заканчивается выбор. Может возвращать null , если выделение никогда не существовало в документе (например, в iframe , на который никогда не нажимали).
Selection.focusOffset Только чтение
Возвращает число, представляющее смещение привязки выделения в пределах focusNode . Если focusNode является текстовым узлом, это количество символов в пределах focusNode , предшествующих фокусу.Если focusNode является элементом, это количество дочерних узлов focusNode , предшествующих фокусу.
Selection.isCollapsed Только чтение
Возвращает логическое значение, указывающее, находятся ли начальная и конечная точки выделения в одной и той же позиции.
Selection.rangeCount Только чтение
Возвращает количество диапазонов в выборе.
Selection.type Только чтение
Возвращает DOMString , описывающую тип текущего выделения.

Строковое представление выделения

Вызов метода Selection.toString () возвращает текст, содержащийся в выделении, например:

  var selObj = window. getSelection ();
window.alert (selObj);
  

Обратите внимание, что использование объекта выбора в качестве аргумента для window.alert вызовет метод toString объекта.

Несколько диапазонов в выборе

Объект выбора представляет Диапазон с, который выбрал пользователь.Как правило, он содержит только один диапазон, доступ к которому осуществляется следующим образом:

  var selObj = window.getSelection ();
var range = selObj.getRangeAt (0);  
  • selObj — объект Selection
  • диапазон — объект Диапазон

Как указано в спецификации Selection API, Selection API был первоначально создан Netscape и допускал несколько диапазонов (например, чтобы позволить пользователю выбирать столбец из

).Однако браузеры, отличные от Gecko, не поддерживают несколько диапазонов, и спецификация также требует, чтобы выбор всегда содержал один диапазон.

Выбор и фокус ввода

Выбор и фокус ввода (обозначенный Document.activeElement ) имеют сложную взаимосвязь, которая зависит от браузера. В кроссбраузерном коде их лучше обрабатывать отдельно.

Safari и Chrome (в отличие от Firefox) в настоящее время фокусируют внимание на элементе, содержащем выделение, при программном изменении выделения; возможно, что это может измениться в будущем (см. ошибку W3C 14383 и ошибку WebKit 38696).

Поведение API выбора с точки зрения редактирования изменений фокуса хоста

API выбора имеет общее поведение (т. Е. Разделяется между браузерами), которое определяет, как изменяется поведение фокуса для хостов редактирования после вызова определенных методов.

Поведение выглядит следующим образом:

  1. Узел редактирования получает фокус, если предыдущий выбор находился за его пределами.
  2. Вызывается метод Selection API, вызывающий новый выбор с диапазоном выбора внутри узла редактирования.
  3. Затем фокус переместится на узел редактирования.

Примечание : Методы Selection API могут перемещать фокус только на узел редактирования, но не на другие элементы, на которые можно сфокусироваться (например, ).

Вышеуказанное поведение применяется к выборкам, сделанным с использованием следующих методов:

И когда диапазон изменяется с использованием следующих методов:

Глоссарий

Другие ключевые термины, используемые в этом разделе.

анкер
Якорь выделения — это начальная точка выделения.При выборе с помощью мыши якорь — это место в документе, где изначально была нажата кнопка мыши. Когда пользователь изменяет выбор с помощью мыши или клавиатуры, привязка не перемещается.
узел редактирования
Редактируемый элемент (например, элемент HTML с набором contenteditable или дочерний элемент HTML документа, для которого включен режим designMode ).
фокус выделения
Фокус выделения является конечной точкой выделения.При выделении с помощью мыши фокус находится в том месте документа, где в документе отпущена кнопка мыши. Когда пользователь изменяет выделение с помощью мыши или клавиатуры, фокус становится концом перемещаемого выделения.
диапазон
Диапазон — это непрерывная часть документа. Диапазон может содержать как целые узлы, так и части узлов (например, часть текстового узла). Обычно пользователь выбирает только один диапазон за раз, но пользователь может выбрать несколько диапазонов (например,g. с помощью клавиши Control ). Диапазон может быть получен из выделения как объект range . Объекты диапазона также могут быть созданы через DOM и программно добавлены или удалены из выбора.

Таблицы BCD загружаются только в браузере

Примечания к Gecko

Определение

выбора в The Free Dictionary

Я написал настоящий том, потому что я не нашел другого, что, на мой взгляд, сочетало бы удовлетворительное достижение этих целей с подбором авторов, достаточно ограниченным для ясности и с адекватной точностью и полнотой деталей, биографических и других.

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

Не из-за их покорности, а из-за их страстной искренности он выбрал инциденты и ситуации из повседневной жизни, «связанные с выбором языка, на самом деле используемого людьми». Он постоянно пытается приблизить свой язык к настоящему языку людей; но это относится к настоящему языку людей, не на мертвом уровне их обычного общения, а в определенные избранные моменты ярких ощущений, когда этот язык развеивается и облагораживается сантиментами.

[91] Так близко друг к другу внешний вид тщательно проработанных и тщательно аннотированных отрывков профессора Найта из Уильяма Вордсворта и господа

Ибо, хотя то, что можно назвать провозглашенными вордсвортами, включая Мэтью Арнольда, нашло ценность во всем этом остатки его — могли прочесть все, что он написал, «даже« Оду благодарения »- все, я думаю, кроме« Водракура и Джулии »», — но все же решимость таких выборов, как сделанные самим Арнольдом, а теперь профессором Найтом, намекните на определенную, очень очевидную разницу в уровнях его поэтического творчества.

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

Улыбаясь, краснея, с прозрачными глазами, Энн споткнулась и дала странный, забавный небольшой отрывок, который еще больше очаровал ее аудиторию.

Эванс подошел и поболтал с ней, сказав, что у нее очаровательный голос, и она прекрасно «интерпретирует» свой выбор.

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

Этот фундаментальный предмет естественного отбора будет более подробно рассмотрен в четвертой главе; и тогда мы увидим, как Естественный отбор почти неизбежно вызывает значительное вымирание менее совершенных форм жизни и вызывает то, что я назвал дивергенцией характера.

Более того, я убежден, что естественный отбор был основным, но не единственным средством модификации.

Мои выборы в кабинет были сделаны до нашего предыдущего интервью, но вы явили благородный образец патриотизма, подчинив свои личные предпочтения общему благу.

Selection | биология | Britannica

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

искусственный отбор

Немецкий дог (задний) стоит со смесью чихуахуа, чтобы продемонстрировать широкий диапазон размеров пород собак, созданный путем искусственного отбора.

Эллен Леви Финч

Теория эволюции путем естественного отбора была предложена Чарльзом Дарвином и Альфредом Расселом Уоллесом в 1858 году. Они утверждали, что виды с полезной адаптацией к окружающей среде с большей вероятностью выживут и произведут потомство, чем виды с менее полезными адаптации, тем самым увеличивая частоту, с которой полезные адаптации происходят из поколения в поколение. Ограниченные ресурсы, доступные в окружающей среде, способствуют конкуренции, в которой организмы одного или разных видов борются за выживание. В конкурентной борьбе за пищу, место и самок менее приспособленные особи должны умереть или неспособны к воспроизводству, а те, кто лучше приспособлен, выживают и размножаются. В отсутствие конкуренции между организмами естественный отбор может быть вызван чисто экологическими факторами, такими как ненастная погода или сезонные колебания. ( См. естественный отбор.)

Искусственный отбор (или селекционное разведение) отличается от естественного отбора тем, что наследственные вариации вида управляются людьми посредством контролируемого разведения. Селекционер пытается изолировать и размножить те генотипы, которые отвечают за желаемые качества растения или животного в подходящей среде. Эти качества экономически или эстетически желательны для человека, а не полезны для организма в его естественной среде.

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

Оформите подписку Britannica Premium и получите доступ к эксклюзивному контенту. Подпишись сейчас

Дарвин также предложил теорию полового отбора, в соответствии с которой самки выбирают в качестве партнеров наиболее привлекательных самцов; Таким образом, выдающиеся самцы помогли произвести больше молодых, чем посредственных самцов.

The Selection: Special Operations Experiment Полные эпизоды, видео и многое другое

HISTORY® помещает 30 мужчин и женщин без военного опыта через самые тяжелые физические и умственные испытания в их жизни в новой серии «The Selection: Special Operations Experiment» от исполнительного продюсера Питера Берга (Одинокий выживший) и его незаписанного фильма «Фильм 45» и «Буним / Мюррей Продакшн». Эти инструкторы, обученные и возглавляемые ветеранами морских котиков, «зелеными беретами» и армейскими рейнджерами, доводят до пределов возможностей человеческого тела и разума. Премьера восьмисерийного экспериментального сериала состоится в четверг, 15 декабря, в 22:00 по восточноевропейскому времени на канале HISTORY.

«На протяжении всей истории нашей страны тактика подготовки специальных операций играла неотъемлемую роль в наших военных усилиях, и этот сериал дает зрителям редкую возможность увидеть, что нужно для того, чтобы попасть в элиту», — сказал Пол Кабана, исполнительный вице-президент и Начальник отдела программирования ИСТОРИИ.«The Selection» предоставит гражданским лицам уникальную возможность принять участие в захватывающем, аутентичном курсе, проводимом разными ветвями власти вместе, и при этом даст зрителям представление об истоках этих проблем ».

Подразделения специальных операций по всему миру разрабатывают экстремальные тренировочные и оценочные упражнения, чтобы найти лучших из лучших, однако 80 процентов из тех, кто пытается пройти эти тесты, бросают. «Выбор: Эксперимент специальных операций» отправляет разнообразную группу мужчин и женщин в возрасте от 21 до 45 лет в эпическое путешествие самопознания, сталкиваясь с их самыми большими страхами и проверяя свою волю к выживанию.По пути зрители получат представление о происхождении каждой из проблем, с которыми сталкиваются участники, а также о целях, стоящих за ними.

30 гражданских участников инструктируют шесть лучших ветеранов боевых действий, которые работают в различных подразделениях специальных операций США, в том числе: Ветеранские морские котики: Маркус Капоне, Рэй Кэр и Шон Хаггерти; ветеран спецназа «зеленые береты» Донни Боуэн и Берт Кунц, а также ветеран армейского рейнджера Тайлер Грей.

Преподаватели бросают им вызов как психологически, так и физически, включая слезоточивый газ, моделирование допроса и психологическую войну среди других тестов, участники доведены до грани отказа и могут исключить себя из программы на любом этапе.Это не серия соревнований — никаких денежных вознаграждений — только проверка против самого себя, чтобы увидеть, есть ли у ума воля и сила, чтобы подтолкнуть тело к выполнению задач.

«Выбор: Эксперимент специальных операций» производится для ИСТОРИИ кинокомпанией Film 45 и Bunim / Murray Productions. Питер Берг (Lone Survivor), Мэтт Голдберг, Брэндон Кэрролл и Грант Калер — исполнительные продюсеры фильма 45, а Гил Голдшайн — исполнительный продюсер Bunim / Murray Productions. Джем Йетер и Джоэл Карсберг также являются исполнительными продюсерами.Тим Хили, Стивен Минц и Расс МакКэрролл — исполнительные продюсеры HISTORY. «The Selection: Special Operations Experiment» основан на формате «SAS: Who Dares Wins» от Minnow Films.

:: выбор | CSS-уловки

Выберите это предложение с помощью курсора. Обратите внимание, как при выделении текста цвет фона заполняет пространство? Вы можете изменить цвет фона и цвет выделенного текста, задав стиль :: selection . Стилизация этого псевдоэлемента отлично подходит для сопоставления выбранного пользователем текста с цветовой схемой вашего сайта.

  p :: - moz-selection {color: red}
p :: selection {цвет: красный; }  

Обратите внимание, что двойное двоеточие необходимо в синтаксисе этого псевдоэлемента, несмотря на то, что другие псевдоэлементы принимают одиночное двоеточие.

Как видно выше, вы можете задать стиль :: selection для отдельных элементов. Вы также можете стилизовать всю страницу, отбросив пустой псевдоэлемент в таблице стилей.

  :: - moz-selection {фон: желтый; }
:: selection {фон: желтый; }  

Есть только три свойства, с которыми будет работать :: selection :

  • цвет
  • фон ( цвет фона , фоновое изображение )
  • тень текста

См. Тесты Pen :: selection Криса Койера (@chriscoyier) на CodePen.

Если вы попытаетесь стилизовать :: selection со свойством, которого нет в списке, то это свойство будет проигнорировано. Может быть сложно увидеть фон в этом списке, потому что свойство будет отображать цвет только при использовании в :: selection , и оно не будет отображать фоновое изображение или градиент.

Также не пробуйте это:

  р :: - moz-selection,
p :: selection {цвет: красный; }  

Когда браузеры находят часть выбора, которую они не понимают, они отбрасывают целиком, так что это все время терпит неудачу.

Одним из наиболее полезных применений :: selection является отключение text-shadow во время выделения. text-shadow может конфликтовать с цветом фона выделения и затруднять чтение текста. Установите text-shadow: none; , чтобы текст был четким и легко читаемым при выделении.

См. Pen :: selection text-shadow Криса Койера (@chriscoyier) на CodePen.

Fancy :: выбор

В паре с Sass или любым другим препроцессором вы можете создавать действительно крутые эффекты с :: selection .Выделите текст в демонстрации ниже:

Вы могли заметить, что в некоторых браузерах эффект не такой плавный. Давайте разместим эту демонстрацию в разделе: «Возможные вещи, но, вероятно, просто для развлечения».

Еще один тупой, но забавный трюк — показать изображение через выделенный текст.

Сопутствующие объекты

Дополнительные ресурсы

Поддержка браузера

Desktop
Chrome Firefox IE Edge Safari
4 2 * 9 12 3.1
Мобильный / планшет

1,13. Выбор функций — документация scikit-learn 0.

24.1

Можно использовать классы в модуле sklearn.feature_selection для выбора функций / уменьшения размерности на выборках, либо улучшить показатели точности оценщиков или повысить их эффективность на очень многомерные наборы данных.

1.13.1. Удаление элементов с низкой дисперсией

VarianceThreshold — это простой базовый подход к выбору функций. Он удаляет все функции, дисперсия которых не достигает определенного порога. По умолчанию он удаляет все функции с нулевой дисперсией, то есть функции, которые имеют одинаковое значение во всех выборках.

В качестве примера предположим, что у нас есть набор данных с логическими функциями, и мы хотим удалить все функции, которые равны единице или нулю (включены или выключены) в более чем 80% образцов.Булевы функции — это случайные величины Бернулли, а дисперсия таких переменных равна

\ [\ mathrm {Var} [X] = p (1 — p) \]

, поэтому мы можем выбрать с помощью порога ,8 * (1 - 0,8) :

 >>> from sklearn. feature_selection import VarianceThreshold
>>> X = [[0, 0, 1], [0, 1, 0], [1, 0, 0], [0, 1, 1], [0, 1, 0], [0, 1 , 1]]
>>> sel = VarianceThreshold (threshold = (. 8 * (1 - .8)))
>>> sel.fit_transform (X)
массив ([[0, 1],
       [1, 0],
       [0, 0],
       [1, 1],
       [1, 0],
       [1, 1]])
 

Как и ожидалось, VarianceThreshold удалил первый столбец, что имеет вероятность \ (p = 5/6>.8 \) содержащего ноль.

1.13.2. Выбор одномерного элемента

Одномерный выбор функций работает путем выбора лучших функций на основе одномерные статистические тесты. Это можно рассматривать как этап предварительной обработки оценщику. Scikit-learn предоставляет процедуры выбора функций как объекты, реализующие метод преобразования :

  • SelectKBest удаляет все, кроме \ (k \), функций с наивысшей оценкой

  • SelectPercentile удаляет все, кроме указанной пользователем наивысшей оценки процент характеристик

  • с использованием общих одномерных статистических тестов для каждой функции: частота ложных срабатываний SelectFpr , частота ложных обнаружений SelectFdr , или семейная ошибка SelectFwe . 2 \) испытание на образцы чтобы получить только две лучшие функции следующим образом:

     >>> from sklearn.datasets import load_iris
    >>> из sklearn.feature_selection импорт SelectKBest
    >>> из sklearn.feature_selection import chi2
    >>> X, y = load_iris (return_X_y = True)
    >>> X.shape
    (150, 4)
    >>> X_new = SelectKBest (chi2, k = 2) .fit_transform (X, y)
    >>> X_new.shape
    (150, 2)
     

    Эти объекты принимают в качестве входных данных функцию оценки, которая возвращает одномерные оценки. и p-значения (или только оценки для SelectKBest и SelectPercentile ):

    Методы, основанные на F-тесте, оценивают степень линейной зависимости между две случайные величины.С другой стороны, методы взаимной информации могут фиксировать любые статистические зависимости, но, будучи непараметрическими, они требуют большего образцы для точной оценки.

    Предупреждение

    Остерегайтесь использовать функцию оценки регрессии с классификацией. проблема, вы получите бесполезные результаты.

    1.13.3. Рекурсивное устранение признаков

    Учитывая внешнюю оценку, которая присваивает веса характеристикам (например, коэффициенты линейной модели), цель устранения рекурсивного признака ( RFE ) заключается в выборе функций путем рекурсивного рассмотрения все меньших и меньших наборов Особенности.Сначала оценщик обучается на начальном наборе функций и важность каждой функции достигается либо через какой-либо конкретный атрибут (например, coef_ , feature_importances_ ) или вызываемый. Затем наименее важное функции удаляются из текущего набора функций. Эта процедура рекурсивно повторяется на обрезанном наборе до тех пор, пока не будет выбрано желаемое количество функций. в итоге доехал.

    RFECV выполняет RFE в цикле перекрестной проверки, чтобы найти оптимальную количество функций.

    1.13.4. Выбор функции с помощью SelectFromModel

    SelectFromModel — это мета-преобразователь, который можно использовать вместе с любым оценивает важность каждой функции с помощью определенного атрибута (например, coef_ , feature_importances_ ) или может быть вызван после установки. Признаки считаются неважными и удаляются, если соответствующие важность функций значения ниже предоставленных порог параметр. Помимо указания порога численно, есть встроенные эвристики для поиска порога с использованием строкового аргумента.Доступные эвристики: «среднее», «медианное» и кратные числам с плавающей запятой, например «0,1 * среднее». В сочетании с критерием порога можно использовать max_features параметр, чтобы установить ограничение на количество выбираемых функций.

    Примеры его использования см. В разделах ниже.

    1.13.4.1. Выбор функций на основе L1

    Линейные модели, наказанные нормой L1, имеют разреженные решения: многие из их оценочных коэффициентов равны нулю.Когда цель заключается в уменьшении размерности данных для использования с другим классификатором, их можно использовать вместе с SelectFromModel для выбора ненулевых коэффициентов. В частности, полезны разреженные оценки. для этой цели используются лассо , для регрессии и из LogisticRegression и LinearSVC для классификации:

     >>> из sklearn.svm import LinearSVC
    >>> из sklearn.datasets импортировать load_iris
    >>> из склеарн.feature_selection импорт SelectFromModel
    >>> X, y = load_iris (return_X_y = True)
    >>> X.shape
    (150, 4)
    >>> lsvc = LinearSVC (C = 0,01, штраф = "l1", dual = False) .fit (X, y)
    >>> model = SelectFromModel (lsvc, prefit = True)
    >>> X_new = model.transform (X)
    >>> X_new.shape
    (150, 3)
     

    С SVM и логистической регрессией параметр C контролирует разреженность: чем меньше C, тем меньше функций выбирается. С Лассо, чем выше Параметр альфа, тем меньше функций выбрано.

    L1-восстановление и измерение давления

    Для хорошего выбора альфа-канала лассо может полностью восстановить точный набор ненулевых переменных с использованием всего нескольких наблюдений при условии соблюдены определенные особые условия. В частности, количество образцы должны быть «достаточно большими», иначе модели L1 будут работать на случайный, где «достаточно большой» зависит от количества ненулевых коэффициенты, логарифм количества признаков, количество шум, наименьшее абсолютное значение ненулевых коэффициентов и структура матрицы плана X.Кроме того, матрица дизайна должна отображать определенные специфические свойства, например, не слишком коррелировать.

    Нет общего правила для выбора альфа-параметра для восстановления ненулевые коэффициенты. Это может быть установлено путем перекрестной проверки ( LassoCV или LassoLarsCV ), хотя это может привести к модели с недостаточными штрафами: в том числе небольшое количество нерелевантных переменные не влияют на оценку прогноза. BIC ( LassoLarsIC ), напротив, имеет тенденцию устанавливать высокие значения альфа.

    Ссылка Ричард Г. Баранюк «Измерение сжатия», сигнал IEEE Журнал Processing [120] Июль 2007 г. http://users.isr.ist.utl.pt/~aguiar/CS_notes.pdf

    1.13.4.2. Выбор элементов на основе дерева

    Оценщики на основе дерева (см. Модуль sklearn.tree и лес деревьев в модуле sklearn.ensemble ) можно использовать для вычисления на основе примесей важности признаков, которые, в свою очередь, могут использоваться для отбрасывания нерелевантных функции (в сочетании с SelectFromModel мета-трансформатор):

     >>> из sklearn.ансамбль импорт ExtraTreesClassifier
    >>> из sklearn.datasets импортировать load_iris
    >>> из sklearn.feature_selection import SelectFromModel
    >>> X, y = load_iris (return_X_y = True)
    >>> X.shape
    (150, 4)
    >>> clf = ExtraTreesClassifier (n_estimators = 50)
    >>> clf = clf.fit (X, y)
    >>> clf.feature_importances_
    массив ([0,04 ..., 0,05 ..., 0,4 ..., 0,4 ...])
    >>> model = SelectFromModel (clf, prefit = True)
    >>> X_new = model.transform (X)
    >>> X_new.форма
    (150, 2)
     

    1.13.5. Последовательный выбор функций

    Последовательный выбор функций [sfs] (SFS) доступен в SequentialFeatureSelector трансформатор. SFS может быть вперед или назад:

    Forward-SFS — это жадная процедура, которая итеративно находит лучшую новую функцию добавить в набор выбранных функций. Конкретно сначала начнем с нулевую функцию и найдите одну функцию, которая максимизирует оценку перекрестной проверки когда оценщик обучен этой единственной функции.Однажды эта первая особенность выбрано, повторяем процедуру, добавляя новую функцию в набор выбранные функции. Процедура останавливается, когда желаемое количество выбранных функции достигаются, как определено параметром n_features_to_select .

    Backward-SFS следует той же идее, но работает в противоположном направлении: вместо того, чтобы начинать без функции и жадно добавлять функции, мы начинаем с все функции и жадно удаляют функции из набора.В direction Параметр управляет использованием прямого или обратного SFS.

    Как правило, прямой и обратный выбор не дает эквивалентных результатов. Кроме того, один может быть намного быстрее другого в зависимости от запрошенного числа. выбранных функций: если у нас есть 10 функций и мы запрашиваем 7 выбранных функций, при прямом выборе потребуется выполнить 7 итераций, при обратном выборе нужно будет выполнить только 3.

    SFS отличается от RFE и SelectFromModel в том, что он не требует, чтобы базовая модель отображала coef_ или feature_importances_ атрибут.Однако это может быть медленнее, учитывая, что необходимо больше моделей оценивается по сравнению с другими подходами. Например в обратном выбор, итерация идет от м признаков до м - 1 признаков с использованием k-кратного перекрестная проверка требует установки моделей m * k , в то время как RFE потребует только одной посадки, и SelectFromModel всегда делает только один подходят и не требуют итераций.

    1.13.6. Выбор функции как часть конвейера

    Выбор функций обычно используется как этап предварительной обработки перед выполнением фактическое обучение. Рекомендуемый способ сделать это в scikit-learn: использовать трубопровод :

     clf = конвейер ([
      ('feature_selection', SelectFromModel (LinearSVC (штраф = "l1"))),
      ('классификация', RandomForestClassifier ())
    ])
    clf.fit (X, y)
     

    В этом фрагменте мы используем LinearSVC в сочетании с SelectFromModel чтобы оценить важность функций и выбрать наиболее подходящие функции. Затем RandomForestClassifier обучается на преобразованный выход, т.е.е. используя только соответствующие функции. Вы можете выполнить аналогичные операции с другими методами выбора функций, а также Классификаторы, которые, конечно же, позволяют оценить важность функций. См. Примеры Pipeline для более подробной информации.

    Индексирование и выбор данных — документация pandas 1.2.2

    Информация о маркировке осей в объектах pandas служит многим целям:

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

    • Включает автоматическое и явное выравнивание данных.

    • Позволяет интуитивно получать и настраивать подмножества набора данных.

    В этом разделе мы сосредоточимся на последнем пункте: а именно, как нарезать, нарезать кубиками, и обычно получают и устанавливают подмножества объектов pandas. Основное внимание будет уделяться на Series и DataFrame, поскольку они получили больше внимания разработчиков в эта зона.

    Примечание

    Операторы индексации Python и NumPy [] и оператор атрибута . обеспечить быстрый и легкий доступ к структурам данных pandas в широком диапазоне вариантов использования. Это делает интерактивную работу интуитивно понятной, так как мало нового чтобы узнать, знаете ли вы, как работать со словарями Python и NumPy массивы. Однако, поскольку тип данных, к которым нужно получить доступ, неизвестен в заранее, прямое использование стандартных операторов имеет некоторые ограничения оптимизации. За производственного кода, мы рекомендуем вам воспользоваться оптимизированным методы доступа к данным pandas, представленные в этой главе.

    Предупреждение

    Возвращается ли копия или ссылка для операции настройки, может зависят от контекста. Иногда это называется присвоение цепочки и необходимо избегать. См. Раздел «Возврат просмотра или копии».

    См. MultiIndex / Advanced Indexing для MultiIndex и дополнительную документацию по индексированию.

    См. Поваренную книгу для некоторых расширенных стратегий.

    Различные варианты индексации¶

    Выбор объекта был дополнен по запросу пользователя, чтобы поддерживать более явную индексацию на основе местоположения.pandas теперь поддерживает три типа многоосевой индексации.

    • .loc в основном основан на метках, но также может использоваться с логическим массивом. .loc вызовет KeyError , если элементы не найдены. Допустимые входы:

      • Одна этикетка, например 5 или 'a' (Обратите внимание, что 5 интерпретируется как метка индекса. Это использование , а не целое число вдоль индекс.).

      • Список или массив меток ['a', 'b', 'c'] .

      • Объект среза с метками 'a': 'f' (Обратите внимание, что в отличие от обычного Python срезов, и включаются начало и конец, если они присутствуют в индекс! См. Раздел «Нарезка с помощью этикеток» и конечные точки включены.)

      • Логический массив (любые значения NA будут обрабатываться как False ).

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

      Подробнее см. Выбор по этикетке.

    • .iloc в основном основан на целочисленных позициях (от 0 до length-1 оси), но также может использоваться с логическим значением множество. .iloc вызовет IndexError , если запрошенный индексатор находится за пределами границ, за исключением сегментов индексаторов , которые позволяют индексирование вне пределов. (это соответствует Python / NumPy slice семантика). Допустимые входы:

      • Целое число e.грамм. 5 .

      • Список или массив целых чисел [4, 3, 0] .

      • Объект среза с целыми числами 1: 7 .

      • Логический массив (любые значения NA будут обрабатываться как False ).

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

      Подробнее см. Выбор по позиции, Расширенное индексирование и расширенное Иерархический.

    • .loc , .iloc , а также [] индексирование может принимать вызываемый в качестве индексатора. Подробнее см. Выбор по вызываемому.

    Для получения значений из объекта с многоосевым выделением используются следующие обозначение (на примере .loc , но следующее применяется к .iloc как Что ж). Любой из аксессоров осей может быть нулевым срезом : . Топоры остались вне предполагается, что спецификация — : , e.грамм. p.loc ['a'] эквивалентно p.loc ['a',:,:] .

Android Chrome Android Firefox Android iOS Safari
88 85 4,4
4,4

Тип объекта

Индексаторы

Серия

s.loc [индексатор]

DataFrame

df. loc [row_indexer, column_indexer]

Основы¶

Как упоминалось при представлении структур данных в последнем разделе, основная функция индексации с [] (a.k.a. __getitem__ для тех, кто знаком с реализацией поведения классов в Python) выбирает низкоразмерные срезы. В следующей таблице показаны значения возвращаемого типа, когда индексирование объектов pandas с помощью [] :

Тип объекта

Выбор

Тип возвращаемого значения

Серия

серия [этикетка]

скалярное значение

DataFrame

фрейм [colname]

Серия , соответствующая столбцу

Здесь мы создаем простой набор данных временного ряда, чтобы использовать его для иллюстрации функциональность индексации:

 В [1]: date = pd. диапазон_даты ('01.01.2000', периодов = 8)

В [2]: df = pd.DataFrame (np.random.randn (8, 4),
   ...: индекс = даты, столбцы = ['A', 'B', 'C', 'D'])
   ...:

В [3]: df
Из [3]:
                   А Б В Г
2000-01-01 0,469112 -0,282863 -1,509059 -1,135632
2000-01-02 1,212112 -0,173215 0,119209 -1,044236
2000-01-03 -0,861849 -2,104569 -0,494929 1,071804
2000-01-04 0,721555 -0,706771 -1,039575 0,271860
2000-01-05 -0,424972 0,567020 0,276232 -1,087401
2000-01-06 -0.673690 0,113648 -1,478427 0,524988
2000-01-07 0,404705 0,577046 -1,715002 -1,039268
2000-01-08 -0,370647 -1,157892 -1,344312 0,844885
 

Примечание

Ни одна из функций индексирования не зависит от временных рядов, если только конкретно указано.

Таким образом, как указано выше, у нас есть самая простая индексация с использованием [] :

 В [4]: ​​s = df ['A']

В [5]: s [даты [5]]
Выход [5]: -0.6736897080883706
 

Вы можете передать список столбцов на [] , чтобы выбрать столбцы в указанном порядке. Если столбец не содержится в DataFrame, исключение будет поднятый. Также можно задать несколько столбцов:

 В [6]: df
Из [6]:
                   А Б В Г
2000-01-01 0,469112 -0,282863 -1,509059 -1,135632
2000-01-02 1,212112 -0,173215 0,119209 -1,044236
2000-01-03 -0,861849 -2,104569 -0,494929 1,071804
2000-01-04 0,721555 -0,706771 -1,039575 0,271860
2000-01-05 -0,424972 0,567020 0,276232 -1,087401
2000-01-06 -0,673690 0,113648 -1,478427 0.524988
2000-01-07 0,404705 0,577046 -1,715002 -1,039268
2000-01-08 -0,370647 -1,157892 -1,344312 0,844885

В [7]: df [['B', 'A']] = df [['A', 'B']]

В [8]: df
Из [8]:
                   А Б В Г
2000-01-01 -0,282863 0,469112 -1,509059 -1,135632
2000-01-02 -0,173215 1,212112 0,119209 -1,044236
2000-01-03 -2,104569 -0,861849 -0,494929 1,071804
2000-01-04 -0,706771 0,721555 -1,039575 0,271860
2000-01-05 0,567020 -0,424972 0,276232 -1,087401
2000-01-06 0,113648 -0.673690 -1,478427 0,524988
2000-01-07 0,577046 0,404705 -1,715002 -1,039268
2000-01-08 -1,157892 -0,370647 -1,344312 0,844885
 

Вы можете найти это полезным для применения преобразования (на месте) к подмножеству столбцы.

Предупреждение

pandas выравнивает все ОСИ при установке Series и DataFrame из .loc и .iloc .

Это приведет к изменению , а не df , потому что выравнивание столбца выполняется до присвоения значения.

 В [9]: df [['A', 'B']]
Из [9]:
                   А Б
2000-01-01 -0,282863 0,469112
2000-01-02 -0,173215 1,212112
2000-01-03 -2,104569 -0,861849
2000-01-04 -0,706771 0,721555
2000-01-05 0,567020 -0,424972
2000-01-06 0,113648 -0,673690
2000-01-07 0,577046 0,404705
2000-01-08 -1,157892 -0,370647

В [10]: df.loc [:, ['B', 'A']] = df [['A', 'B']]

В [11]: df [['A', 'B']]
Из [11]:
                   А Б
2000-01-01 -0,282863 0,469112
2000-01-02 -0,173215 1,212112
2000-01-03 -2.104569 -0,861849
2000-01-04 -0,706771 0,721555
2000-01-05 0,567020 -0,424972
2000-01-06 0,113648 -0,673690
2000-01-07 0,577046 0,404705
2000-01-08 -1,157892 -0,370647
 

Правильный способ поменять местами значения столбцов — использовать необработанные значения:

 В [12]: df. loc [:, ['B', 'A']] = df [['A', 'B']]. To_numpy ()

В [13]: df [['A', 'B']]
Из [13]:
                   А Б
2000-01-01 0,469112 -0,282863
2000-01-02 1,212112 -0,173215
2000-01-03 -0,861849 -2,104569
2000-01-04 0,721555 -0.706771
2000-01-05 -0,424972 0,567020
2000-01-06 -0,673690 0,113648
2000-01-07 0,404705 0,577046
2000-01-08 -0,370647 -1,157892
 

Доступ к атрибутам¶

Вы можете получить доступ к индексу на Series или столбцу на DataFrame напрямую как атрибут:

 В [14]: sa = pd.Series ([1, 2, 3], index = list ('abc'))

В [15]: dfa = df.copy ()
 
 В [16]: sa.b
Вых [16]: 2

В [17]: dfa.A
Из [17]:
2000-01-01 0,469112
2000-01-02 1.212112
2000-01-03 -0.861849
2000-01-04 0,721555
2000-01-05 -0,424972
2000-01-06 -0,673690
2000-01-07 0,404705
2000-01-08 -0,370647
Freq: D, имя: A, dtype: float64
 
 В [18]: sa.a = 5

В [19]: sa
Из [19]:
а 5
Би 2
c 3
dtype: int64

В [20]: dfa.A = list (range (len (dfa.index))) # нормально, если A уже существует

В [21]: dfa
Из [21]:
            А Б В Г
2000-01-01 0 -0,282863 -1,509059 -1,135632
2000-01-02 1 -0,173215 0,119209 -1,044236
2000-01-03 2 -2. 104569 -0.494929 1,071804
2000-01-04 3 -0,706771 -1,039575 0,271860
2000-01-05 4 0,567020 0,276232 -1,087401
2000-01-06 5 0,113648 -1,478427 0,524988
2000-01-07 6 ​​0,577046 -1,715002 -1,039268
2000-01-08 7 -1,157892 -1,344312 0,844885

В [22]: dfa ['A'] = list (range (len (dfa.index))) # используйте эту форму для создания нового столбца

В [23]: dfa
Из [23]:
            А Б В Г
2000-01-01 0 -0,282863 -1,509059 -1,135632
2000-01-02 1 -0,173215 0,119209 -1,044236
2000-01-03 2 -2.104569 -0.494929 1,071804
2000-01-04 3 -0,706771 -1,039575 0,271860
2000-01-05 4 0,567020 0,276232 -1,087401
2000-01-06 5 0,113648 -1,478427 0,524988
2000-01-07 6 ​​0,577046 -1,715002 -1,039268
2000-01-08 7 -1,157892 -1,344312 0,844885
 

Предупреждение

Если вы используете среду IPython, вы также можете использовать завершение табуляции для увидеть эти доступные атрибуты.

Вы также можете назначить dict строке DataFrame :

 В [24]: x = pd.DataFrame ({'x': [1, 2, 3], 'y': [3, 4, 5]})

В [25]: x.iloc [1] = {'x': 9, 'y': 99}

В [26]: x
Из [26]:
   х у
0 1 3
1 9 99
2 3 5
 

Вы можете использовать доступ к атрибутам для изменения существующего элемента Серии или столбца DataFrame, но будьте осторожны; если вы попытаетесь использовать доступ к атрибутам для создания нового столбца, он создаст новый атрибут, а не новый столбец. В версии 0.21.0 и новее это вызовет UserWarning :

 В [1]: df = pd.DataFrame ({'one': [1., 2., 3.]})
В [2]: df.two = [4, 5, 6]
UserWarning: Pandas не позволяет назначать серии в несуществующие столбцы - см. Https://pandas.pydata.org/pandas-docs/stable/indexing.html#attribute_access
В [3]: df
Из [3]:
   один
0 1.0
1 2,0
2 3,0
 

Диапазоны нарезки

Самый надежный и последовательный способ нарезки диапазонов по произвольным осям — это описано в разделе «Выбор по позиции» детализация .iloc метод. А пока мы объясним семантику нарезки с помощью оператора [] .

С Series синтаксис работает точно так же, как с ndarray, возвращая фрагмент значения и соответствующие метки:

 В [27]: s [: 5]
Из [27]:
2000-01-01 0,469112
2000-01-02 1.212112
2000-01-03 -0,861849
2000-01-04 0,721555
2000-01-05 -0,424972
Freq: D, имя: A, dtype: float64

В [28]: s [:: 2]
Из [28]:
2000-01-01 0,469112
2000-01-03 -0,861849
2000-01-05 -0. 424972
2000-01-07 0,404705
Freq: 2D, имя: A, dtype: float64

В [29]: s [:: - 1]
Из [29]:
2000-01-08 -0,370647
2000-01-07 0,404705
2000-01-06 -0,673690
2000-01-05 -0,424972
2000-01-04 0,721555
2000-01-03 -0,861849
2000-01-02 1.212112
2000-01-01 0,469112
Freq: -1D, имя: A, dtype: float64
 

Обратите внимание, что настройка также работает:

 В [30]: s2 = s.copy ()

В [31]: s2 [: 5] = 0

В [32]: s2
Из [32]:
2000-01-01 0,000000
2000-01-02 0,000000
2000-01-03 0.000000
2000-01-04 0,000000
2000-01-05 0,000000
2000-01-06 -0,673690
2000-01-07 0,404705
2000-01-08 -0,370647
Freq: D, имя: A, dtype: float64
 

С DataFrame нарезка внутри [] нарезает строки . Это предусмотрено в основном для удобства, поскольку это обычная операция.

 В [33]: df [: 3]
Из [33]:
                   А Б В Г
2000-01-01 0,469112 -0,282863 -1,509059 -1,135632
2000-01-02 1,212112 -0,173215 0.119209 -1,044236
2000-01-03 -0,861849 -2,104569 -0,494929 1,071804

В [34]: df [:: - 1]
Из [34]:
                   А Б В Г
2000-01-08 -0,370647 -1,157892 -1,344312 0,844885
2000-01-07 0,404705 0,577046 -1,715002 -1,039268
2000-01-06 -0,673690 0,113648 -1,478427 0,524988
2000-01-05 -0,424972 0,567020 0,276232 -1,087401
2000-01-04 0,721555 -0,706771 -1,039575 0,271860
2000-01-03 -0,861849 -2,104569 -0,494929 1,071804
2000-01-02 1,212112 -0,173215 0,119209 -1,044236
2000-01-01 0. 469112 -0,282863 -1,509059 -1,135632
 

Выбор по этикетке¶

Предупреждение

Будет ли возвращена копия или ссылка для операции настройки, может зависеть от контекста. Иногда это называется присвоением цепочки , и его следует избегать. См. Раздел «Возврат просмотра или копии».

Предупреждение

.loc является строгим, когда вы представляете срезы, которые не совместимы (или конвертируются) с типом индекса. Например используя целые числа в DatetimeIndex .Это вызовет TypeError .

 В [35]: dfl = pd.DataFrame (np.random.randn (5, 4),
   ....: columns = list ('ABCD'),
   ....: index = pd.date_range ('20130101', периоды = 5))
   ....:

В [36]: dfl
Из [36]:
                   А Б В Г
2013-01-01 1.075770 -0.109050 1.643563 -1.469388
2013-01-02 0,357021 -0,674600 -1,776904 -0,968914
2013-01-03 -1.294524 0,413738 0,276662 -0,472035
2013-01-04 -0.013960 -0. 362543 -0,006154 -0,

1 2013-01-05 0,895717 0,805244 -1,206412 2,565646

 В [4]: ​​dfl.loc [2: 3]
TypeError: невозможно выполнить индексирование срезов на  с этими индексаторами [2] 
 

Подобия строки в нарезке могут быть преобразованы в в тип индекса и привести к естественному нарезанию.

 В [37]: dfl.loc ['20130102': '20130104']
Из [37]:
                   А Б В Г
2013-01-02 0.357021 -0,674600 -1,776904 -0,968914
2013-01-03 -1.294524 0,413738 0,276662 -0,472035
2013-01-04 -0,013960 -0,362543 -0,006154 -0,

1

pandas предоставляет набор методов для индексирования на основе меток. . Это протокол, основанный на строгом включении. Каждая запрошенная метка должна быть в индексе, в противном случае возникнет KeyError . При нарезке как начальная граница , так и граница остановки составляют , включая , если они присутствуют в индексе. Целые числа являются допустимыми метками, но они относятся к метке , а не к позиции .

Атрибут .loc является основным методом доступа. Следующие допустимые входы:

 В [38]: s1 = pd.Series (np.random.randn (6), index = list ('abcdef'))

В [39]: s1
Из [39]:
1. 431256
b 1.340309
с -1.170299
d -0,226169
e 0,410835
f 0,813850
dtype: float64

В [40]: s1.loc ['c':]
Из [40]:
с -1.170299
d -0,226169
e 0,410835
f 0,813850
dtype: float64

В [41]: s1.loc ['b']
Из [41]: 1.3403088497993827
 

Обратите внимание, что настройка также работает:

 В [42]: s1.loc ['c':] = 0

В [43]: s1
Из [43]:
1.431256
b 1.340309
с 0,000000
г 0,000000
е 0,000000
f 0,000000
dtype: float64
 

с DataFrame:

 В [44]: df1 = pd.DataFrame (np.random.randn (6, 4),
   ....: index = list ('abcdef'),
   ....: columns = list ('ABCD'))
   ....:

В [45]: df1
Из [45]:
          А Б В Г
а 0,132003 -0,827317 -0,076467 -1,187678
б 1.130127 -1.436737 -1.413681 1.607920
в 1.024180 0.569605 0.875906 -2.211372
г 0,974466 -2,006747 -0,410001 -0,078638
е 0,545952 -1,219217 -1,226825 0,769804
ф -1,281247 -0,727707 -0,121306 -0,097883

В [46]: df1.loc [['a', 'b', 'd'],:]
Из [46]:
          А Б В Г
а 0.132003 -0,827317 -0,076467 -1,187678
б 1.130127 -1.436737 -1. 413681 1.607920
г 0,974466 -2,006747 -0,410001 -0,078638
 

Доступ через срезы этикеток:

 В [47]: df1.loc ['d' :, 'A': 'C']
Из [47]:
          А Б В
д 0,974466 -2,006747 -0,410001
е 0,545952 -1,219217 -1,226825
ф -1,281247 -0,727707 -0,121306
 

Для получения поперечного сечения с помощью метки (эквивалент df.xs ('a') ):

 В [48]: df1.loc ['a']
Из [48]:
А 0.132003
В -0,827317
С -0.076467
D -1.187678
Имя: a, dtype: float64
 

Для получения значений с помощью логического массива:

 В [49]: df1.loc ['a']> 0
Из [49]:
Правда
B ложно
C Ложь
D Ложь
Имя: a, dtype: bool

В [50]: df1.loc [:, df1.loc ['a']> 0]
Из [50]:
          А
а 0,132003
б 1.130127
в 1.024180
г 0,974466
e 0,545952
f -1,281247
 

значений NA в логическом массиве распространяются как False :

Изменено в версии 1.0.2.

 В [51]: маска = pd.array ([True, False, True, False, pd.NA, False], dtype = "boolean")

В [52]: маска
Из [52]:

[Верно, Ложно, Верно, Ложно, , Ложно]
Длина: 6, dtype: boolean

В [53]: df1 [маска]
Из [53]:
          А Б В Г
а 0,132003 -0,827317 -0,076467 -1,187678
в 1. 024180 0.569605 0.875906 -2.211372
 

Для явного получения значения:

 # это также эквивалентно `df1.at ['a', 'A']` `
В [54]: df1.loc ['a', 'A']
Аут [54]: 0.13200317033032932
 

Нарезка этикетками¶

При использовании .loc со срезами, если метки начала и конца присутствуют в индексе, то элементы расположены между ними (включая их) возвращаются:

 В [55]: s = pd.Series (list ('abcde'), index = [0, 3, 2, 5, 4])

В [56]: s.loc [3: 5]
Из [56]:
3 б
2 с
5 дней
dtype: объект
 

Если хотя бы один из двух отсутствует, но индекс отсортирован и может быть по сравнению с метками начала и остановки, то нарезка будет работать как ожидается, выбрав метки, которые ранжируют между двумя:

 В [57]: с.sort_index ()
Из [57]:
0 а
2 с
3 б
4 е
5 дней
dtype: объект

В [58]: s.sort_index (). Loc [1: 6]
Из [58]:
2 с
3 б
4 е
5 дней
dtype: объект
 

Однако, если хотя бы один из двух отсутствует и , индекс не сортируется, возникнет ошибка (иначе это потребует больших вычислительных ресурсов, а также потенциально неоднозначный для индексов смешанного типа). Например, в в примере выше s.loc [1: 6] вызовет KeyError .

Обоснование такого поведения см. Конечные точки включены.

 В [59]: s = pd.Series (list ('abcdef'), index = [0, 3, 2, 5, 4, 2])

В [60]: s.loc [3: 5]
Из [60]:
3 б
2 с
5 дней
dtype: объект
 

Кроме того, если в индексе есть повторяющиеся метки и , либо начальная, либо конечная метка дублируются, возникнет ошибка. Например, в приведенном выше примере s.loc [2: 5] вызовет KeyError .

Для получения дополнительной информации о повторяющихся этикетках см. Повторяющиеся ярлыки.

Выбор по позиции¶

Предупреждение

Будет ли возвращена копия или ссылка для операции настройки, может зависеть от контекста.Иногда это называется присвоением цепочки , и его следует избегать. См. Раздел «Возврат просмотра или копии».

pandas предоставляет набор методов для получения чисто целочисленной индексации . Семантика близко соответствует нарезке Python и NumPy. Это индексация на основе 0. При нарезке начальная граница - , включая , а верхняя граница - , исключая . Попытка использовать нецелое число, даже допустимая метка вызовет IndexError .

Атрибут .iloc является основным методом доступа. Следующие допустимые входы:

 В [61]: s1 = pd.Series (np.random.randn (5), индекс = список (диапазон (0, 10, 2)))

В [62]: s1
Из [62]:
0 0,695775
2 0,341734
4 0,959726
6 -1,110336
8 -0,619976
dtype: float64

В [63]: s1.iloc [: 3]
Из [63]:
0 0,695775
2 0,341734
4 0,959726
dtype: float64

В [64]: s1. iloc [3]
Из [64]: -1.1103361028
  • Обратите внимание, что настройка также работает:

     В [65]: s1.iloc [: 3] = 0
    
    В [66]: s1
    Из [66]:
    0 0,000000
    2 0,000000
    4 0,000000
    6 -1,110336
    8 -0,619976
    dtype: float64
     

    с DataFrame:

     В [67]: df1 = pd.DataFrame (np.random.randn (6, 4),
       ....: index = list (диапазон (0, 12, 2)),
       ....: columns = list (диапазон (0, 8, 2)))
       ....:
    
    В [68]: df1
    Из [68]:
               0 2 4 6
    0 0,149748 -0,732339 0,687738 0,176444
    2 0,403310 -0,154951 0,301624 -2,179861
    4 -1,369849 -0,954208 1,462696 -1,743161
    6 -0,826591 -0,345352 1,314232 0,6
    8 0,995761 2,396780 0,014871 3,357427
    10 -0,317441 -1,236269 0,896171 -0,487602
     

    Выбор с помощью целочисленного нарезания:

     В [69]: df1.iloc [: 3]
    Из [69]:
              0 2 4 6
    0 0,149748 -0,732339 0,687738 0,176444
    2 0,403310 -0,154951 0,301624 -2,179861
    4 -1,369849 -0,954208 1,462696 -1,743161
    
    В [70]: df1.iloc [1: 5, 2: 4]
    Из [70]:
              4 6
    2 0,301624 -2,179861
    4 1,462696 -1,743161
    6 1,314232 0,6
    8 0,014871 3,357427
     

    Выбрать через целочисленный список:

     В [71]: df1. iloc [[1, 3, 5], [1, 3]]
    Из [71]:
               2 6
    2 -0,154951 -2,179861
    6 -0,345352 0,6
    10 -1.236269 -0,487602
     
     В [72]: df1.iloc [1: 3,:]
    Из [72]:
              0 2 4 6
    2 0,403310 -0,154951 0,301624 -2,179861
    4 -1,369849 -0,954208 1,462696 -1,743161
     
     В [73]: df1.iloc [:, 1: 3]
    Из [73]:
               2 4
    0 -0,732339 0,687738
    2 -0,154951 0,301624
    4 -0,954208 1,462696
    6 -0,345352 1,314232
    8 2,396780 0,014871
    10 -1,236269 0,896171
     
     # это также эквивалентно `df1.iat [1,1]`
    В [74]: df1.iloc [1, 1]
    Аут [74]: -0.1549507744249032
     

    Для получения поперечного сечения с использованием целочисленной позиции (эквивалент df.xs (1) ):

     В [75]: df1.iloc [1]
    Из [75]:
    0 0,403310
    2 -0,154951
    4 0,301624
    6 -2,179861
    Имя: 2, dtype: float64
     

    Индексы срезов вне диапазона обрабатываются изящно, как в Python / NumPy.

     # это разрешено в Python / NumPy.
    В [76]: x = list ('abcdef')
    
    В [77]: x
    Out [77]: ['a', 'b', 'c', 'd', 'e', ​​'f']
    
    В [78]: x [4:10]
    Out [78]: ['e', 'f']
    
    В [79]: x [8:10]
    Из [79]: []
    
    В [80]: s = pd. Серия (x)
    
    В [81]: s
    Из [81]:
    0 а
    1 б
    2 с
    3 дн.
    4 е
    5 ж
    dtype: объект
    
    В [82]: s.iloc [4:10]
    Из [82]:
    4 е
    5 ж
    dtype: объект
    
    В [83]: s.iloc [8:10]
    Out [83]: Series ([], dtype: object)
     

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

     В [84]: dfl = pd.DataFrame (np.random.randn (5, 2), columns = list ('AB'))
    
    В [85]: dfl
    Из [85]:
              А Б
    0 -0,082240 -2,182937
    1 0,380396 0.084844
    2 0,432390 1,519970
    3 -0,493662 0,600178
    4 0,274230 0,132885
    
    В [86]: dfl.iloc [:, 2: 3]
    Из [86]:
    Пустой фрейм данных
    Столбцы: []
    Индекс: [0, 1, 2, 3, 4]
    
    В [87]: dfl.iloc [:, 1: 3]
    Из [87]:
              B
    0 -2,182937
    1 0,084844
    2 1,519970
    3 0,600178
    4 0,132885
    
    В [88]: dfl.iloc [4: 6]
    Из [88]:
             А Б
    4 0,27423 0,132885
     

    Один индексатор, выходящий за границы, вызовет IndexError . Список индексаторов, у которых какой-либо элемент выходит за границы, вызовет IndexError .

     >>> dfl.iloc [[4, 5, 6]]
    IndexError: позиционные индексаторы находятся за пределами
    
    >>> dfl.iloc [:, 4]
    IndexError: одиночный позиционный индексатор находится за пределами
     

    Выбор по телефону

    .loc , .iloc , а также [] индексирование может принимать вызываемый в качестве индексатора. Вызываемая функция должна быть функцией с одним аргументом (вызывающая серия или DataFrame), которая возвращает допустимые выходные данные для индексации.

     В [89]: df1 = pd.DataFrame (np.random.randn (6, 4),
       ....: index = list ('abcdef'),
       ....: columns = list ('ABCD'))
       ....:
    
    В [90]: df1
    Из [90]:
              А Б В Г
    а -0,023688 2,410179 1,450520 0,206053
    б -0,251905 -2,213588 1,063327 1,266143
    в 0,299368 -0,863838 0,408204 -1,048089
    г -0,025747 -0,988387 0,094055 1,262731
    е 1,289997 0,082423 -0,055758 0,536580
    ф -0,489682 0,369374 -0,034571 -2,484478
    
    В [91]: df1.loc [lambda df: df ['A']> 0,:]
    Из [91]:
              А Б В Г
    с 0. 299368 -0,863838 0,408204 -1,048089
    е 1,289997 0,082423 -0,055758 0,536580
    
    В [92]: df1.loc [:, lambda df: ['A', 'B']]
    Из [92]:
              А Б
    а -0,023688 2,410179
    б -0,251905 -2,213588
    в 0,299368 -0,863838
    г -0,025747 -0,988387
    е 1,289997 0,082423
    ж -0,489682 0,369374
    
    В [93]: df1.iloc [:, lambda df: [0, 1]]
    Из [93]:
              А Б
    а -0,023688 2,410179
    б -0,251905 -2,213588
    в 0,299368 -0,863838
    г -0,025747 -0,988387
    е 1,289997 0,082423
    ж -0,489682 0,369374
    
    В [94]: df1 [лямбда df: df.столбцы [0]]
    Из [94]:
    а -0,023688
    б -0,251905
    в 0,299368
    d -0,025747
    e 1.289997
    f -0,489682
    Имя: A, dtype: float64
     

    Вы можете использовать вызываемое индексирование в серии .

     В [95]: df1 ['A']. Loc [лямбда s: s> 0]
    Из [95]:
    в 0,299368
    e 1.289997
    Имя: A, dtype: float64
     

    Используя эти методы / индексаторы, вы можете связать операции выбора данных без использования временной переменной.

     В [96]: bb = pd.read_csv ('data / baseball.csv', index_col = 'id')
    
    В [97]: (bb. groupby (['год', 'команда']). sum ()
       ....: .loc [лямбда df: df ['r']> 100])
       ....:
    Из [97]:
               stint g ab r h X2b X3b hr rbi sb cs bb so ibb hbp sh sf gidp
    год команда
    2007 КИН 6 379 745 101 203 35 2 36 125,0 10,0 1,0 105 127,0 14,0 1,0 1,0 15,0 18,0
         DET 5 301 1062 162 283 54 4 37 144,0 24,0 7.0 97 176,0 3,0 10,0 4,0 8,0 28,0
         ГОУ 4 311 926 109 218 47 6 14 77,0 10,0 4,0 60 212,0 3,0 9,0 16,0 6,0 17,0
         LAN 11413 1021 153293 61 3 36 154,0 7,0 5,0 114 141,0 8,0 9,0 3,0 8,0 29,0
         NYN 13 622 1854 240 509 101 3 61 243,0 22,0 4,0 174 310,0 24,0 23,0 18,0 15,0 48,0
         SFN 5 482 1305 198 337 67 6 40 171,0 26,0 7,0 235 188,0 51,0 8,0 16,0 6,0 41,0
         ТЕКСТ 2 198 729 115 200 40 4 28 115.0 21,0 4,0 73140,0 4,0 5,0 2,0 8,0 16,0
         ТЗ 4 459 1408 187 378 96 2 58 223,0 4,0 2,0 190 265,0 16,0 12,0 4,0 16,0 38,0
     

    Сочетание позиционной индексации и индексации на основе меток¶

    Если вы хотите получить 0-й и 2-й элементы из индекса в столбце «A», вы можете сделать:

     В [98]: dfd = pd.DataFrame ({'A': [1, 2, 3],
       ....: 'B': [4, 5, 6]},
       ....: index = список ('abc'))
       ....:
    
    В [99]: dfd
    Из [99]:
       А Б
    а 1 4
    б 2 5
    в 3 6
    
    В [100]: dfd.loc [dfd.index [[0, 2]], 'A']
    Из [100]:
    а 1
    c 3
    Имя: A, dtype: int64
     

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

     В [101]: dfd.iloc [[0, 2], dfd.columns.get_loc ('A')]
    Из [101]:
    а 1
    c 3
    Имя: A, dtype: int64
     

    Для получения нескольких индексаторов , используя .get_indexer :

     В [102]: dfd.iloc [[0, 2], dfd.columns.get_indexer (['A', 'B'])]
    Из [102]:
       А Б
    а 1 4
    в 3 6
     

    Индексирование со списком без меток устарело

    Предупреждение

    Изменено в версии 1.0.0.

    Использование .loc или [] со списком с одной или несколькими пропущенными метками больше не будет переиндексировать в пользу .reindex .

    В предыдущих версиях при использовании .loc [list-of-labels] работал бы до тех пор, пока было найдено не менее 1 ключей (в противном случае вызовет KeyError ).Это поведение было изменено и теперь будет вызывать KeyError , если хотя бы одна метка отсутствует. Рекомендуемая альтернатива - использовать .reindex () .

    Например.

     В [103]: s = pd.Series ([1, 2, 3])
    
    В [104]: s
    Из [104]:
    0 1
    1 2
    2 3
    dtype: int64
     

    Выбор со всеми найденными ключами не изменился.

     В [105]: s.loc [[1, 2]]
    Из [105]:
    1 2
    2 3
    dtype: int64
     

    Предыдущее поведение

     В [4]: ​​s.loc [[1, 2, 3]]
    Из [4]:
    1 2.0
    2 3,0
    3 NaN
    dtype: float64
     

    Текущее поведение

     В [4]: ​​s.loc [[1, 2, 3]]
    Передача списков лайков в .loc с любыми несоответствующими элементами вызовет
    KeyError в будущем вы можете использовать .reindex () в качестве альтернативы.
    
    Смотрите документацию здесь:
    https://pandas.pydata.org/pandas-docs/stable/indexing.html#deprecate-loc-reindex-listlike
    
    Из [4]:
    1 2,0
    2 3,0
    3 NaN
    dtype: float64
     

    Переиндексирование¶

    Идиоматический способ добиться выбора потенциально не найденных элементов - через .переиндекс () . См. Также раздел о переиндексации.

     В [106]: s.reindex ([1, 2, 3])
    Из [106]:
    1 2,0
    2 3,0
    3 NaN
    dtype: float64
     

    В качестве альтернативы, если вы хотите выбрать только действительных ключа , следующее будет идиоматическим и эффективным; гарантируется сохранение dtype выделения.

     В [107]: label = [1, 2, 3]
    
    В [108]: s.loc [s.index.intersection (метки)]
    Из [108]:
    1 2
    2 3
    dtype: int64
     

    Наличие дублированного индекса повысит до .переиндекс () :

     В [109]: s = pd.Series (np.arange (4), index = ['a', 'a', 'b', 'c'])
    
    В [110]: label = ['c', 'd']
     
     В [17]: s.reindex (метки)
    ValueError: невозможно переиндексировать с повторяющейся оси
     

    Как правило, желаемые метки можно пересекать с текущими оси, а затем переиндексировать.

     В [111]: s.loc [s.index.intersection (метки)]. Reindex (метки)
    Из [111]:
    в 3,0
    d NaN
    dtype: float64
     

    Однако, это будет по-прежнему повышаться, если ваш результирующий индекс дублируется.

     В [41]: labels = ['a', 'd']
    
    В [42]: s.loc [s.index.intersection (метки)]. Reindex (метки)
    ValueError: невозможно переиндексировать с повторяющейся оси
     

    Выбор случайных выборок

    Случайный выбор строк или столбцов из Series или DataFrame с помощью метода sample () . По умолчанию метод отбирает строки и принимает определенное количество строк / столбцов для возврата или часть строк.

     В [112]: s = pd.Series ([0, 1, 2, 3, 4, 5])
    
    # Если аргументы не переданы, возвращается 1 строка.В [113]: s.sample ()
    Из [113]:
    4 4
    dtype: int64
    
    # Можно указать либо количество строк:
    В [114]: s.sample (n = 3)
    Из [114]:
    0 0
    4 4
    1 1
    dtype: int64
    
    # Или часть строк:
    В [115]: s.sample (frac = 0,5)
    Из [115]:
    5 5
    3 3
    1 1
    dtype: int64
     

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

     В [116]: s = pd.Series ([0, 1, 2, 3, 4, 5])
    
    # Без замены (по умолчанию):
    В [117]: с.образец (n = 6, replace = False)
    Из [117]:
    0 0
    1 1
    5 5
    3 3
    2 2
    4 4
    dtype: int64
    
    # С заменой:
    В [118]: s.sample (n = 6, replace = True)
    Из [118]:
    0 0
    4 4
    3 3
    2 2
    4 4
    4 4
    dtype: int64
     

    По умолчанию каждая строка имеет равную вероятность быть выбранной, но если вы хотите, чтобы строки чтобы иметь разные вероятности, вы можете передать веса выборки функции sample как весов . Эти веса могут быть списком, массивом NumPy или серией, но они должны быть той же длины, что и объект, который вы выбираете.Отсутствующие значения будут рассматриваться как нулевой вес, а значения inf не допускаются. Если весовые коэффициенты не равны 1, они будут повторно нормализованы путем деления всех весов на сумму весов. Например:

     В [119]: s = pd.Series ([0, 1, 2, 3, 4, 5])
    
    В [120]: example_weights = [0, 0, 0,2, 0,2, 0,2, 0,4]
    
    В [121]: s.sample (n = 3, weights = example_weights)
    Из [121]:
    5 5
    4 4
    3 3
    dtype: int64
    
    # Вес будет повторно нормализован автоматически
    В [122]: example_weights2 = [0,5, 0, 0, 0, 0, 0]
    
    В [123]: с.образец (n = 1, weights = example_weights2)
    Из [123]:
    0 0
    dtype: int64
     

    При применении к DataFrame вы можете использовать столбец DataFrame в качестве весов выборки. (при условии, что вы выбираете строки, а не столбцы), просто передавая имя столбца в виде строки.

     В [124]: df2 = pd.DataFrame ({'col1': [9, 8, 7, 6],
       .....: 'weight_column': [0.5, 0.4, 0.1, 0]})
       .....:
    
    В [125]: df2.sample (n = 3, weights = 'weight_column')
    Из [125]:
       col1 weight_column
    1 8 0.4
    0 9 0,5
    2 7 0,1
     

    образец также позволяет пользователям выбирать столбцы вместо строк, используя аргумент оси .

     В [126]: df3 = pd.DataFrame ({'col1': [1, 2, 3], 'col2': [2, 3, 4]})
    
    В [127]: df3.sample (n = 1, axis = 1)
    Из [127]:
       col1
    0 1
    1 2
    2 3
     

    Наконец, можно также установить начальное число для генератора случайных чисел sample , используя аргумент random_state , который принимает либо целое число (как начальное значение), либо объект NumPy RandomState.

     В [128]: df4 = pd.DataFrame ({'col1': [1, 2, 3], 'col2': [2, 3, 4]})
    
    # С заданным семенем образец всегда будет рисовать одни и те же строки.
    В [129]: df4.sample (n = 2, random_state = 2)
    Из [129]:
       col1 col2
    2 3 4
    1 2 3
    
    В [130]: df4.sample (n = 2, random_state = 2)
    Из [130]:
       col1 col2
    2 3 4
    1 2 3
     

    Настройка с увеличением¶

    Операции .loc / [] могут выполнять увеличение при установке несуществующего ключа для этой оси.

    В случае Series это фактически операция добавления.

     В [131]: se = pd.Series ([1, 2, 3])
    
    В [132]: se
    Из [132]:
    0 1
    1 2
    2 3
    dtype: int64
    
    В [133]: se [5] = 5.
    
    В [134]: se
    Из [134]:
    0 1.0
    1 2,0
    2 3,0
    5 5,0
    dtype: float64
     

    DataFrame может быть увеличен по любой оси через .loc .

     В [135]: dfi = pd.DataFrame (np.arange (6) .reshape (3, 2),
       .....: columns = ['A', 'B'])
       .....:
    
    В [136]: dfi
    Из [136]:
       А Б
    0 0 1
    1 2 3
    2 4 5
    
    В [137]: dfi.loc [:, 'C'] = dfi.loc [:, 'A']
    
    В [138]: dfi
    Из [138]:
       А Б В
    0 0 1 0
    1 2 3 2
    2 4 5 4
     

    Это похоже на операцию добавления к DataFrame .

     В [139]: dfi.loc [3] = 5
    
    В [140]: dfi
    Из [140]:
       А Б В
    0 0 1 0
    1 2 3 2
    2 4 5 4
    3 5 5 5
     

    Быстрое получение и установка скалярных значений¶

    Поскольку индексирование с помощью [] должно обрабатывать множество случаев (доступ по одной метке, нарезка, логическое индексирование и т. д.), у него есть небольшие накладные расходы, чтобы вычислить из того, что вы просите. Если вы хотите получить доступ только к скалярному значению, Самый быстрый способ - использовать методы на и iat , которые реализованы на все структуры данных.

    Аналогично loc , на обеспечивает скалярный поиск на основе метки , а iat обеспечивает поиск на основе целых чисел аналогично iloc

     In [141]: s.iat [5]
    Вых [141]: 5
    
    В [142]: df.в [даты [5], 'A']
    Из [142]: -0.6736897080883706
    
    В [143]: df.iat [3, 0]
    Из [143]: 0,7215551622443669
     

    Можно также установить с помощью этих же индексаторов.

     В [144]: df.at [date [5], 'E'] = 7
    
    В [145]: df.iat [3, 0] = 7
     

    на может увеличить объект на месте, как указано выше, если индексатор отсутствует.

     В [146]: df.at [даты [-1] + pd.Timedelta ('1 день'), 0] = 7
    
    В [147]: df
    Из [147]:
                       А Б В Г Д Е 0
    2000-01-01 0.469112 -0,282863 -1,509059 -1,135632 NaN NaN
    2000-01-02 1,212112 -0,173215 0,119209 -1,044236 NaN NaN
    2000-01-03 -0,861849 -2,104569 -0,494929 1,071804 NaN NaN
    2000-01-04 7,000000 -0,706771 -1,039575 0,271860 NaN NaN
    2000-01-05 -0,424972 0,567020 0,276232 -1,087401 NaN NaN
    2000-01-06 -0,673690 0,113648 -1,478427 0,524988 7,0 NaN
    2000-01-07 0,404705 0,577046 -1,715002 -1,039268 NaN NaN
    2000-01-08 -0,370647 -1,157892 -1,344312 0,844885 NaN NaN
    9 января 2000 г. NaN NaN NaN NaN NaN 7.0
     

    Булево индексирование¶

    Другой распространенной операцией является использование логических векторов для фильтрации данных. Операторы: | для или , и для и и ~ для , а не . Эти должны быть сгруппированы с использованием скобок, так как по умолчанию Python будет оценить такое выражение, как df ['A']> 2 & df ['B'] <3 как df ['A']> (2 & df ['B']) <3 , а желаемый порядок оценки (df ['A']> 2) и (df ['B'] <3) .

    Использование логического вектора для индексации серии работает точно так же, как в NumPy ndarray:

     В [148]: s = pd.Series (range (-3, 4))
    
    В [149]: s
    Из [149]:
    0–3
    1-2
    2-1
    3 0
    4 1
    5 2
    6 3
    dtype: int64
    
    В [150]: s [s> 0]
    Из [150]:
    4 1
    5 2
    6 3
    dtype: int64
    
    В [151]: s [(s <-1) | (s> 0,5)]
    Из [151]:
    0–3
    1-2
    4 1
    5 2
    6 3
    dtype: int64
    
    В [152]: s [~ (s <0)]
    Из [152]:
    3 0
    4 1
    5 2
    6 3
    dtype: int64
     

    Вы можете выбирать строки из DataFrame, используя логический вектор той же длины, что и индекс DataFrame (например, что-то производное от одного из столбцов DataFrame):

     В [153]: df [df ['A']> 0]
    Из [153]:
                       А Б В Г Д Е 0
    2000-01-01 0.469112 -0,282863 -1,509059 -1,135632 NaN NaN
    2000-01-02 1,212112 -0,173215 0,119209 -1,044236 NaN NaN
    2000-01-04 7,000000 -0,706771 -1,039575 0,271860 NaN NaN
    2000-01-07 0,404705 0,577046 -1,715002 -1,039268 NaN NaN
     
    Понимание списков

    и метод map Series также можно использовать для создания более сложные критерии:

     В [154]: df2 = pd.DataFrame ({'a': ['one', 'one', 'two', 'three', 'two', 'one', 'six'],
       .....: 'b': ['x', 'y', 'y', 'x', 'y', 'x', 'x'],
       .....: 'c': np.random.randn (7)})
       .....:
    
    # нужно только два или три
    В [155]: критерий = df2 ['a']. Map (lambda x: x.startswith ('t'))
    
    В [156]: df2 [критерий]
    Из [156]:
           а б в
    2 два года 0,041290
    3 три x 0,361719
    4 два года -0,238075
    
    # эквивалентно, но медленнее
    В [157]: df2 [[x.startswith ('t') для x в df2 ['a']]]
    Из [157]:
           а б в
    2 два года 0,041290
    3 три x 0,361719
    4 два года -0,238075
    
    # Несколько критериев
    В [158]: df2 [критерий & (df2 ['b'] == 'x')]
    Из [158]:
           а б в
    3 три x 0.361719
     

    С методами выбора Выбор по метке, Выбор по позиции, и Advanced Indexing, вы можете выбрать более чем одну ось, используя логические векторы в сочетании с другими выражениями индексации.

     В [159]: df2.loc [критерий & (df2 ['b'] == 'x'), 'b': 'c']
    Из [159]:
       до н.э
    3 х 0,361719
     

    Предупреждение

    iloc поддерживает два вида логической индексации. Если индексатор является логическим Series , возникнет ошибка.Например, в следующем примере df.iloc [s.values, 1] подходит. Логический индексатор - это массив. Но df.iloc [s, 1] вызовет ValueError .

     В [160]: df = pd.DataFrame ([[1, 2], [3, 4], [5, 6]],
       .....: index = list ('abc'),
       .....: columns = ['A', 'B'])
       .....:
    
    В [161]: s = (df ['A']> 2)
    
    В [162]: s
    Из [162]:
    ложный
    б Верно
    c Верно
    Имя: A, dtype: bool
    
    В [163]: df.loc [s, 'B']
    Из [163]:
    б 4
    с 6
    Имя: B, dtype: int64
    
    В [164]: df.iloc [s.values, 1]
    Из [164]:
    б 4
    с 6
    Имя: B, dtype: int64
     

    Индексирование с помощью isin¶

    Рассмотрим метод isin () из Series , который возвращает логическое значение вектор, который является истинным везде, где в переданном списке присутствуют элементы Series . Это позволяет вам выбирать строки, в которых один или несколько столбцов имеют нужные вам значения:

     В [165]: s = pd.Series (np.arange (5), index = np.arange (5) [:: - 1], dtype = 'int64')
    
    В [166]: s
    Из [166]:
    4 0
    3 1
    2 2
    1 3
    0 4
    dtype: int64
    
    В [167]: с.isin ([2, 4, 6])
    Из [167]:
    4 ложь
    3 ложь
    2 Верно
    1 ложь
    0 Верно
    dtype: bool
    
    В [168]: s [s.isin ([2, 4, 6])]
    Из [168]:
    2 2
    0 4
    dtype: int64
     

    Тот же метод доступен для объектов Index и полезен для случаев когда вы не знаете, какие ярлыки на самом деле присутствуют:

     В [169]: s [s.index.isin ([2, 4, 6])]
    Из [169]:
    4 0
    2 2
    dtype: int64
    
    # сравните это со следующим
    В [170]: s.reindex ([2, 4, 6])
    Из [170]:
    2 2.0
    4 0,0
    6 NaN
    dtype: float64
     

    Кроме того, MultiIndex позволяет выбрать отдельный уровень для использования в проверке членства:

     В [171]: s_mi = pd.Series (np.arange (6),
       .....: index = pd.MultiIndex.from_product ([[0, 1], ['a', 'b', 'c']]))
       .....:
    
    В [172]: s_mi
    Из [172]:
    0 а 0
       б 1
       c 2
    1 а 3
       б 4
       в 5
    dtype: int64
    
    В [173]: s_mi.iloc [s_mi.index.isin ([(1, 'a'), (2, 'b'), (0, 'c')])]
    Из [173]:
    0 с 2
    1 а 3
    dtype: int64
    
    В [174]: s_mi.iloc [s_mi.index.isin (['a', 'c', 'e'], level = 1)]
    Из [174]:
    0 а 0
       c 2
    1 а 3
       в 5
    dtype: int64
     

    DataFrame также имеет метод isin () . При вызове находится в , передайте набор значения в виде массива или dict. Если значения являются массивом, isin возвращает DataFrame логических значений, имеющий ту же форму, что и исходный DataFrame, с True где бы элемент ни находился в последовательности значений.

     В [175]: df = pd.DataFrame ({'vals': [1, 2, 3, 4], 'ids': ['a', 'b', 'f', 'n'],
       .....: 'ids2': ['a', 'n', 'c', 'n']})
       .....:
    
    В [176]: values ​​= ['a', 'b', 1, 3]
    
    В [177]: df.isin (значения)
    Из [177]:
        vals ids ids2
    0 правда правда правда
    1 Неверно Верно Неверно
    2 Верно Неверно Неверно
    3 Ложь Ложь Ложь
     

    Часто бывает необходимо сопоставить определенные значения с определенными столбцами. Просто сделайте значения dict , где ключом является столбец, а значение список элементов, которые вы хотите проверить.

     В [178]: values ​​= {'ids': ['a', 'b'], 'vals': [1, 3]}
    
    В [179]: df.isin (значения)
    Из [179]:
        vals ids ids2
    0 верно верно неверно
    1 Неверно Верно Неверно
    2 Верно Неверно Неверно
    3 Ложь Ложь Ложь
     

    Объедините DataFrame isin с методами any () и all () , чтобы быстро выбрать подмножества ваших данных, которые соответствуют заданным критериям. Чтобы выбрать строку, в которой каждый столбец соответствует своему критерию:

     В [180]: values ​​= {'ids': ['a', 'b'], 'ids2': ['a', 'c'], 'vals': [1, 3]}
    
    В [181]: row_mask = df.isin (значения).все (1)
    
    В [182]: df [row_mask]
    Из [182]:
       vals ids ids2
    0 1 а а
     

    The

    where () Метод и маскирование¶

    Выбор значений из серии с логическим вектором обычно возвращает подмножество данных. Чтобы гарантировать, что результат выбора имеет ту же форму, что и Исходные данные, вы можете использовать метод where в Series и DataFrame .

    Чтобы вернуть только выбранные строки:

     В [183]: s [s> 0]
    Из [183]:
    3 1
    2 2
    1 3
    0 4
    dtype: int64
     

    Чтобы вернуть серию той же формы, что и оригинал:

     В [184]: с.где (s> 0)
    Из [184]:
    4 NaN
    3 1.0
    2 2,0
    1 3,0
    0 4,0
    dtype: float64
     

    Выбор значений из DataFrame с логическим критерием теперь также сохраняет форма входных данных. , где используется под капотом в качестве реализации. Приведенный ниже код эквивалентен df. где (df <0) .

     В [185]: df [df <0]
    Из [185]:
                       А Б В Г
    2000-01-01 -2.104139 -1.309525 NaN NaN
    2000-01-02 -0,352480 NaN -1.1 NaN
    2000-01-03 -0,864883 NaN -0,227870 NaN
    2000-01-04 NaN -1.222082 NaN -1.233203
    2000-01-05 NaN -0.605656 -1,169184 NaN
    2000-01-06 NaN -0.948458 NaN -0.684718
    2000-01-07 -2,670153 -0,114722 NaN -0,048048
    2000-01-08 NaN NaN -0.048788 -0.808838
     

    Кроме того, , где принимает необязательный другой аргумент для замены значения, для которых условие равно False, в возвращенной копии.

     В [186]: df.где (df <0, -df)
    Из [186]:
                       А Б В Г
    2000-01-01 -2.104139 -1.309525 -0.485855 -0.245166
    2000-01-02 -0,352480 -0,3 -1,1 -1,655824
    2000-01-03 -0,864883 -0,299674 -0,227870 -0,281059
    2000-01-04 -0,846958 -1,222082 -0,600705 -1,233203
    2000-01-05 -0,669692 -0.605656 -1,169184 -0,342416
    2000-01-06 -0,868584 -0,948458 -2,297780 -0,684718
    2000-01-07 -2,670153 -0,114722 -0,168904 -0,048048
    2000-01-08 -0.801196 -1.3

    -0.048788 -0.808838

    Вы можете установить значения на основе некоторых логических критериев.Интуитивно это можно сделать так:

     В [187]: s2 = s.copy ()
    
    В [188]: s2 [s2 <0] = 0
    
    В [189]: s2
    Из [189]:
    4 0
    3 1
    2 2
    1 3
    0 4
    dtype: int64
    
    В [190]: df2 = df.copy ()
    
    В [191]: df2 [df2 <0] = 0
    
    В [192]: df2
    Из [192]:
                       А Б В Г
    2000-01-01 0,000000 0,000000 0,485855 0,245166
    2000-01-02 0,000000 0,3 0,000000 1,655824
    2000-01-03 0,000000 0,299674 0,000000 0,281059
    2000-01-04 0,846958 0,000000 0.600705 0,000000
    2000-01-05 0,669692 0,000000 0,000000 0,342416
    2000-01-06 0,868584 0,000000 2,297780 0,000000
    2000-01-07 0,000000 0,000000 0,168904 0,000000
    2000-01-08 0.801196 1.3

    0.000000 0.000000

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

     В [193]: df_orig = df.copy ()
    
    В [194]: df_orig.where (df> 0, -df, inplace = True)
    
    В [195]: df_orig
    Из [195]:
                       А Б В Г
    2000-01-01 2.104139 1,309525 0,485855 0,245166
    2000-01-02 0,352480 0,3 1,1 1,655824
    2000-01-03 0,864883 0,299674 0,227870 0,281059
    2000-01-04 0,846958 1,222082 0,600705 1,233203
    2000-01-05 0,669692 0,605656 1,169184 0,342416
    2000-01-06 0,868584 0,948458 2,297780 0,684718
    2000-01-07 2,670153 0,114722 0,168904 0,048048
    2000-01-08 0,801196 1,3

    0,048788 0,808838

    Примечание

    Подпись для DataFrame.where () отличается от numpy.где () . Примерно df1., Где (m, df2) эквивалентно np., Где (m, df1, df2) .

     В [196]: df.where (df <0, -df) == np.where (df <0, df, -df)
    Из [196]:
                   А Б В Г
    2000-01-01 Правда Правда Правда Правда
    2000-01-02 Правда Правда Правда Правда
    2000-01-03 Правда Правда Правда Правда
    2004-01-04 Правда Правда Правда Правда
    05.01.2000 Правда Правда Правда Правда
    2000-01-06 Правда Правда Правда Правда
    07.01.2000 True True True True
    2008-01-08 Правда Правда Правда Правда
     

    Выравнивание

    Кроме того, , где выравнивает входное логическое условие (ndarray или DataFrame), такой, что возможен частичный выбор с настройкой.Это аналогично частичная настройка через .loc (но по содержимому, а не по меткам осей).

     В [197]: df2 = df.copy ()
    
    В [198]: df2 [df2 [1: 4]> 0] = 3
    
    В [199]: df2
    Из [199]:
                       А Б В Г
    2000-01-01 -2.104139 -1.309525 0.485855 0.245166
    2000-01-02 -0.352480 3.000000 -1.1 3.000000
    2000-01-03 -0,864883 3,000000 -0,227870 3,000000
    2000-01-04 3.000000 -1.222082 3.000000 -1.233203
    2000-01-05 0,669692 -0,605656-1.169184 0,342416
    2000-01-06 0,868584 -0,948458 2,297780 -0,684718
    2000-01-07 -2,670153 -0,114722 0,168904 -0,048048
    2000-01-08 0.801196 1.3

    -0.048788 -0.808838

    Где также может принимать параметры оси и уровня для выравнивания ввода, когда выполнение , где .

     В [200]: df2 = df.copy ()
    
    В [201]: df2.where (df2> 0, df2 ['A'], axis = 'index')
    Из [201]:
                       А Б В Г
    2000-01-01 -2.104139 -2.104139 0,485855 0,245166
    2000-01-02 -0,352480 0,3 -0,352480 1,655824
    2000-01-03 -0,864883 0,299674 -0,864883 0,281059
    2000-01-04 0,846958 0,846958 0,600705 0,846958
    2000-01-05 0,669692 0,669692 0,669692 0,342416
    2000-01-06 0,868584 0,868584 2,297780 0,868584
    2000-01-07 -2,670153 -2,670153 0,168904 -2,670153
    2000-01-08 0.801196 1.3

    0.801196 0.801196

    Это эквивалентно (но быстрее) следующему.

     В [202]: df2 = df.copy ()
    
    В [203]: df.apply (лямбда x, y: x.where (x> 0, y), y = df ['A'])
    Из [203]:
                       А Б В Г
    2000-01-01 -2.104139 -2.104139 0,485855 0,245166
    2000-01-02 -0,352480 0,3 -0,352480 1,655824
    2000-01-03 -0,864883 0,299674 -0,864883 0,281059
    2000-01-04 0,846958 0,846958 0,600705 0,846958
    2000-01-05 0,669692 0,669692 0,669692 0,342416
    2000-01-06 0,868584 0,868584 2,297780 0,868584
    2000-01-07 -2,670153 -2,670153 0,168904 -2,670153
    2000-01-08 0.801196 1.3

    0.801196 0.801196

    , где может принимать вызываемый объект как условие и других аргументов. Функция должна быть с одним аргументом (вызывающая серия или DataFrame), который возвращает действительный вывод как условие и другой аргумент .

     В [204]: df3 = pd.DataFrame ({'A': [1, 2, 3],
       .....: 'B': [4, 5, 6],
       .....: 'C': [7, 8, 9]})
       .....:
    
    В [205]: df3.where (лямбда x: x> 4, лямбда x: x + 10)
    Из [205]:
        А Б В
    0 11 14 7
    1 12 5 8
    2 13 6 9
     

    Маска¶

    mask () - это обратная логическая операция для , где .

     В [206]: s.mask (s> = 0)
    Из [206]:
    4 NaN
    3 NaN
    2 NaN
    1 NaN
    0 NaN
    dtype: float64
    
    В [207]: df.mask (df> = 0)
    Из [207]:
                       А Б В Г
    2000-01-01 -2.104139 -1.309525 NaN NaN
    2000-01-02 -0,352480 NaN -1,1 NaN
    2000-01-03 -0,864883 NaN -0,227870 NaN
    2000-01-04 NaN -1.222082 NaN -1.233203
    2000-01-05 NaN -0.605656 -1,169184 NaN
    2000-01-06 NaN -0.948458 NaN -0.684718
    2000-01-07 -2,670153 -0,114722 NaN -0,048048
    2000-01-08 NaN NaN -0.048788 -0.808838
     

    Установка с условным увеличением с использованием

    numpy ()

    Альтернатива , где () - использовать numpy.where () . В сочетании с настройкой нового столбца вы можете использовать его для увеличения фрейма данных, в котором значения определены условно.

    Считайте, что у вас есть два варианта выбора в следующем фрейме данных. И ты хочешь установите цвет нового столбца на «зеленый», если второй столбец имеет «Z».Вы можете сделать следующий:

     В [208]: df = pd.DataFrame ({'col1': list ('ABBC'), 'col2': list ('ZZXY')})
    
    В [209]: df ['color'] = np.where (df ['col2'] == 'Z', 'green', 'red').
    
    В [210]: df
    Из [210]:
      col1 col2 цвет
    0 A Z зеленый
    1 B Z зеленый
    2 B X красный
    3 C Y красный
     

    Если у вас несколько условий, вы можете использовать numpy.select () для этого. Сказать соответствуют трем условиям, есть три варианта цвета, с четвертым цветом в качестве запасного варианта вы можете сделать следующее.

     В [211]: условия = [
       .....: (df ['col2'] == 'Z') & (df ['col1'] == 'A'),
       .....: (df ['col2'] == 'Z') & (df ['col1'] == 'B'),
       .....: (df ['col1'] == 'B')
       .....:]
       .....:
    
    В [212]: choices = ['желтый', 'синий', 'фиолетовый']
    
    В [213]: df ['color'] = np.select (условия, варианты, по умолчанию = 'черный')
    
    В [214]: df
    Из [214]:
      col1 col2 цвет
    0 A Z желтый
    1 B Z синий
    2 B X фиолетовый
    3 C Y черный
     

    Объекты DataFrame имеют query () метод, который позволяет выбирать с помощью выражения.

    Вы можете получить значение кадра, в котором столбец b имеет значения между значениями столбцов a и c . Например:

     В [215]: n = 10
    
    В [216]: df = pd.DataFrame (np.random.rand (n, 3), columns = list ('abc'))
    
    В [217]: df
    Из [217]:
              а б в
    0 0,438921 0,118680 0,863670
    1 0,138138 0,577363 0,686602
    2 0,595307 0,564592 0,520630
    3 0,

    2 0,926075 0,616184 4 0,078718 0,854477 0,898725 5 0,076404 0.523211 0,5
    6 0,7 0,216974 0,564056
    7 0,397890 0,454131 0,

    6 8 0,074315 0,437913 0,019794 9 0,559209 0,502065 0,026437 # чистый питон В [218]: df [(df ['a'] 7 0,397890 0,454131 0,

    6 # запрос В [219]: df.query ('(a 7 0,397890 0,454131 0,

    6

    Сделайте то же самое, но вернитесь к именованному индексу, если нет столбца с названием a .

     В [220]: df = pd.DataFrame (np.random.randint (n / 2, size = (n, 2)), columns = list ('bc'))
    
    В [221]: df.index.name = 'a'
    
    В [222]: df
    Из [222]:
       до н.э
    а
    0 0 4
    1 0 1
    2 3 4
    3 4 3
    4 1 4
    5 0 3
    6 0 1
    7 3 4
    8 2 3
    9 1 1
    
    В [223]: df.запрос ('a 

    Если вместо этого вы не хотите или не можете давать название своему индексу, вы можете использовать имя индекс в выражении вашего запроса:

     В [224]: df = pd.DataFrame (np.random.randint (n, size = (n, 2)), columns = list ('bc'))
    
    В [225]: df
    Из [225]:
       до н.э
    0 3 1
    1 3 0
    2 5 6
    3 5 2
    4 7 4
    5 0 1
    6 2 5
    7 0 1
    8 6 0
    9 7 9
    
    В [226]: df.query ('index 

    Примечание

    Если имя вашего индекса перекрывается с именем столбца, имя столбца будет учитывая приоритет.Например,

     В [227]: df = pd.DataFrame ({'a': np.random.randint (5, size = 5)})
    
    В [228]: df.index.name = 'a'
    
    В [229]: df.query ('a> 2') # использует столбец 'a', а не индекс
    Из [229]:
       а
    а
    1 3
    3 3
     

    Вы по-прежнему можете использовать индекс в выражении запроса, используя специальный идентификатор "index":

     В [230]: df.query ('index> 2')
    Из [230]:
       а
    а
    3 3
    4 2
     

    Если по какой-то причине у вас есть столбец с именем index , вы можете обратиться к индекс как ilevel_0 также , но на этом этапе вы должны учитывать переименование столбцов в менее неоднозначное.

    MultiIndex query () Синтаксис¶

    Вы также можете использовать уровни DataFrame с MultiIndex , как если бы они были столбцами в кадре:

     В [231]: n = 10
    
    В [232]: colors = np.random.choice (['красный', 'зеленый'], size = n)
    
    В [233]: foods = np.random.choice (['яйца', 'ветчина'], размер = n)
    
    В [234]: цвета
    Из [234]:
    array (['красный', 'красный', 'красный', 'зеленый', 'зеленый', 'зеленый', 'зеленый', 'зеленый',
           'зеленый', 'зеленый'], dtype = '
    зеленые яйца -0,748199 1,318931
          яйца -2,029766 0,792652
          ветчина 0,461007 -0,542749
          ветчина -0,305384 -0,479195
          яйца 0,095031 -0,270099
          яйца -0,707140 -0,773882
          яйца 0.229453 0,304418
    
    В [239]: df.query ('color == "red"')
    Из [239]:
                       0 1
    цветная еда
    красный окорок 0,194889 -0,381994
          ветчина 0,318587 2,089075
          яйца -0,728293 -0,0

    Если уровни MultiIndex не имеют названия, вы можете ссылаться на них, используя специальные имена:

     В [240]: df.index.names = [None, None]
    
    В [241]: df
    Из [241]:
                       0 1
    красный окорок 0,194889 -0,381994
          ветчина 0,318587 2.089075
          яйца -0,728293 -0,0

    зеленые яйца -0,748199 1,318931 яйца -2,029766 0,792652 ветчина 0,461007 -0,542749 ветчина -0,305384 -0,479195 яйца 0,095031 -0,270099 яйца -0,707140 -0,773882 яйца 0,229453 0,304418 В [242]: df.query ('ilevel_0 == "красный"') Из [242]: 0 1 красный окорок 0,194889 -0,381994 ветчина 0,318587 2,089075 яйца -0,728293 -0,0

    Условное обозначение: ilevel_0 , что означает «индексный уровень 0» для 0-го уровня. индекса .

    query () Примеры использования¶

    Пример использования query () - это когда у вас есть коллекция DataFrame объектов, которые имеют подмножество имен столбцов (или индекс уровни / имена) вместе. Вы можете передать один и тот же запрос обоим кадрам без необходимо указать, какой фрейм вы хотите запрашивать

     В [243]: df = pd.DataFrame (np.random.rand (n, 3), columns = list ('abc'))
    
    В [244]: df
    Из [244]:
              а б в
    0 0.224283 0,736107 0,139168
    1 0,302827 0,657803 0,713897
    2 0,611185 0,136624 0,984960
    3 0,195246 0,123436 0,627712
    4 0,618673 0,371660 0,047902
    5 0,480088 0,062993 0,185760
    6 0,568018 0,483467 0,445289
    7 0,309040 0,274580 0,587101
    8 0,258993 0,477769 0,370255
    9 0,550459 0,840870 0,304611
    
    В [245]: df2 = pd.DataFrame (np.random.rand (n + 2, 3), columns = df.columns)
    
    В [246]: df2
    Из [246]:
               а б в
    0 0,357579 0,229800 0,596001
    1 0,309059 0,957923 0.965663
    2 0,123102 0,336914 0,318616
    3 0,526506 0,323321 0,860813
    4 0,518736 0,486514 0,384724
    5 0,1 0,505723 0,614533
    6 0,8 0,623977 0,676639
    7 0,480559 0,378528 0,460858
    8 0,420223 0,136404 0,141295
    9 0,732206 0,419540 0,604675
    10 0,604466 0,848974 0,896165
    11 0,589168 0,
    6 0,732716
    
    В [247]: expr = '0,0 <= a <= c <= 0,5'
    
    В [248]: map (лямбда-фрейм: frame.query (expr), [df, df2])
    Выход [248]: <карта на 0x7f7110fdd910>
     

    query () Сравнение синтаксиса Python и pandas¶

    Полный синтаксис, похожий на numpy:

     В [249]: df = pd.DataFrame (np.random.randint (n, размер = (n, 3)), columns = list ('abc'))
    
    В [250]: df
    Из [250]:
       а б в
    0 7 8 9
    1 1 0 7
    2 2 7 2
    3 6 2 2
    4 2 6 3
    5 3 8 2
    6 1 7 2
    7 5 1 5
    8 9 8 0
    9 1 5 0
    
    В [251]: df.query ('(a 

    Чуть лучше, убрав круглые скобки (путём привязки, сделав сравнение операторы связывают жестче, чем , и | ).

     В [253]: df.query ('a 

    Используйте английский вместо символов:

     В [254]: df.query ('a 

    Довольно близко к тому, как это можно было бы написать на бумаге:

     В [255]: df.query ('a 

    в и не в операторов¶

    query () также поддерживает специальное использование Python в и отсутствует в операторах сравнения , обеспечивая сжатый синтаксис для вызова - это метод из Series или DataFrame .

     # получить все строки, в которых столбцы "a" и "b" имеют перекрывающиеся значения
    В [256]: df = pd.DataFrame ({'a': list ('aabbccddeeff'), 'b': list ('aaaabbbbcccc'),
       .....: 'c': np.random.randint (5, size = 12),
       .....: 'd': np.random.randint (9, size = 12)})
       .....:
    
    В [257]: df
    Из [257]:
        а б в г
    0 а а 2 6
    1 а а 4 7
    2 б а 1 6
    3 б а 2 1
    4 в б 3 6
    5 в б 0 2
    6 д б 3 3
    7 д б 2 1
    8 д в 4 3
    9 д в 2 0
    10 ж в 0 6
    11 f c 1 2
    
    В [258]: df.запрос ('а в б')
    Из [258]:
       а б в г
    0 а а 2 6
    1 а а 4 7
    2 б а 1 6
    3 б а 2 1
    4 в б 3 6
    5 в б 0 2
    
    # Как бы вы это сделали на чистом Python
    В [259]: df [df ['a']. Isin (df ['b'])]
    Из [259]:
       а б в г
    0 а а 2 6
    1 а а 4 7
    2 б а 1 6
    3 б а 2 1
    4 в б 3 6
    5 в б 0 2
    
    В [260]: df.query ('a not in b')
    Из [260]:
        а б в г
    6 д б 3 3
    7 д б 2 1
    8 д в 4 3
    9 д в 2 0
    10 ж в 0 6
    11 f c 1 2
    
    # чистый Python
    В [261]: df [~ df ['a']. Isin (df ['b'])]
    Из [261]:
        а б в г
    6 д б 3 3
    7 д б 2 1
    8 д в 4 3
    9 д в 2 0
    10 ж в 0 6
    11 f c 1 2
     

    Вы можете комбинировать это с другими выражениями для очень сжатых запросов:

     # строки, в которых столбцы a и b имеют перекрывающиеся значения
    # и значения столбца c меньше, чем значения столбца d
    В [262]: df.запрос ('a in b и c 

    Примечание

    Обратите внимание, что в и не в оцениваются в Python, поскольку numexpr не имеет эквивалента этой операции.Однако только в / не в Само выражение вычисляется в ванильном Python. Например, в выражение

     df.query ('a in b + c + d')
     

    (b + c + d) оценивается numexpr и , затем из операция оценивается на простом Python. В общем, любые операции, которые могут оценивается с помощью numexpr будет.

    Специальное использование оператора

    == со списком объектов¶

    Сравнение списка значений со столбцом с использованием == /! = работает аналогично до в / не в .

     В [264]: df.query ('b == ["a", "b", "c"]')
    Из [264]:
        а б в г
    0 а а 2 6
    1 а а 4 7
    2 б а 1 6
    3 б а 2 1
    4 в б 3 6
    5 в б 0 2
    6 д б 3 3
    7 д б 2 1
    8 д в 4 3
    9 д в 2 0
    10 ж в 0 6
    11 f c 1 2
    
    # чистый Python
    В [265]: df [df ['b']. Isin ([«a», «b», «c»])]
    Из [265]:
        а б в г
    0 а а 2 6
    1 а а 4 7
    2 б а 1 6
    3 б а 2 1
    4 в б 3 6
    5 в б 0 2
    6 д б 3 3
    7 д б 2 1
    8 д в 4 3
    9 д в 2 0
    10 ж в 0 6
    11 f c 1 2
    
    В [266]: df.запрос ('c == [1, 2]')
    Из [266]:
        а б в г
    0 а а 2 6
    2 б а 1 6
    3 б а 2 1
    7 д б 2 1
    9 д в 2 0
    11 f c 1 2
    
    В [267]: df.query ('c! = [1, 2]')
    Из [267]:
        а б в г
    1 а а 4 7
    4 в б 3 6
    5 в б 0 2
    6 д б 3 3
    8 д в 4 3
    10 ж в 0 6
    
    # использование в / не в
    В [268]: df.query ('[1, 2] in c')
    Из [268]:
        а б в г
    0 а а 2 6
    2 б а 1 6
    3 б а 2 1
    7 д б 2 1
    9 д в 2 0
    11 f c 1 2
    
    В [269]: df.query ('[1, 2] не в c')
    Из [269]:
        а б в г
    1 а а 4 7
    4 в б 3 6
    5 в б 0 2
    6 д б 3 3
    8 д в 4 3
    10 ж в 0 6
    
    # чистый Python
    В [270]: df [df ['c'].isin ([1, 2])]
    Из [270]:
        а б в г
    0 а а 2 6
    2 б а 1 6
    3 б а 2 1
    7 д б 2 1
    9 д в 2 0
    11 f c 1 2
     

    Логические операторы¶

    Вы можете инвертировать логические выражения с помощью слова , а не или оператора ~ .

     В [271]: df = pd.DataFrame (np.random.rand (n, 3), columns = list ('abc'))
    
    В [272]: df ['bools'] = np.random.rand (len (df))> 0,5
    
    В [273]: df.query ('~ bools')
    Из [273]:
              a b c bools
    2 0.697753 0,212799 0,329209 Ложь
    7 0,275396 0,6 0,826619 Ложь
    8 0,1 0,558748 0,262467 Ложь
    
    В [274]: df.query ('not bools')
    Из [274]:
              a b c bools
    2 0,697753 0,212799 0,329209 Ложь
    7 0,275396 0,6 0,826619 Ложь
    8 0,1 0,558748 0,262467 Ложь
    
    В [275]: df.query ('not bools') == df [~ df ['bools']]
    Из [275]:
          a b c bools
    2 Правда Правда Правда Правда
    7 Правда Правда Правда Правда
    8 Правда Правда Правда Правда
     

    Конечно, выражения могут быть произвольно сложными:

     # короткий синтаксис запроса
    В [276]: shorter = df.query ('a  2')
    
    # эквивалент в чистом Python
    В [277]: длиннее = df [(df ['a']  2)]
       .....:
    
    В [278]: короче
    Из [278]:
              a b c bools
    7 0,275396 0,6 0,826619 Ложь
    
    В [279]: длиннее
    Из [279]:
              a b c bools
    7 0,275396 0,6 0,826619 Ложь
    
    В [280]: короче == длиннее
    Из [280]:
          a b c bools
    7 Правда Правда Правда Правда
     

    Выполнение запроса

    ()

    DataFrame.query () с использованием numexpr немного быстрее, чем Python для большие рамки.

    Примечание

    Вы увидите только преимущества в производительности при использовании двигателя numexpr с DataFrame.query () , если в вашем фрейме больше примерно 200000 ряды.

    Этот график был создан с использованием DataFrame с 3 столбцами, каждый из которых содержит значения с плавающей запятой, сгенерированные с использованием numpy.random.randn () .

    Дубликаты данных¶

    Если вы хотите идентифицировать и удалять повторяющиеся строки в DataFrame, есть два метода, которые помогут: duplicates и drop_duplicates .Каждый принимает в качестве аргумента столбцы для идентификации повторяющихся строк.

    • duplicated возвращает логический вектор, длина которого равна количеству строк и указывает, дублируется ли строка.

    • drop_duplicates удаляет повторяющиеся строки.

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

    • keep = 'first' (по умолчанию): отметить / удалить дубликаты, кроме первого вхождения.

    • keep = 'last' : отметить / удалить дубликаты, кроме последнего вхождения.

    • keep = False : отметить / удалить все дубликаты.

     В [281]: df2 = pd.DataFrame ({'a': ['one', 'one', 'two', 'two', 'two', 'three', 'four'],
       .....: 'b': ['x', 'y', 'x', 'y', 'x', 'x', 'x'],
       .....: 'c': np.random.randn (7)})
       .....:
    
    В [282]: df2
    Из [282]:
           а б в
    0 один x -1.067137
    1 один год 0,309500
    2 два х -0,211056
    3 два года -1.842023
    4 два х -0,3
    5 три x -1.964475
    6 четыре x 1,298329
    
    В [283]: df2.duplicated ('a')
    Из [283]:
    0 ложно
    1 Верно
    2 ложно
    3 Верно
    4 Верно
    5 ложно
    6 ложь
    dtype: bool
    
    В [284]: df2.duplicated ('a', keep = 'last')
    Из [284]:
    0 Верно
    1 ложь
    2 Верно
    3 Верно
    4 ложь
    5 ложно
    6 ложь
    dtype: bool
    
    В [285]: df2.дублированный ('a', keep = False)
    Из [285]:
    0 Верно
    1 Верно
    2 Верно
    3 Верно
    4 Верно
    5 ложно
    6 ложь
    dtype: bool
    
    В [286]: df2.drop_duplicates ('a')
    Из [286]:
           а б в
    0 один x -1.067137
    2 два х -0,211056
    5 три x -1.964475
    6 четыре x 1,298329
    
    В [287]: df2.drop_duplicates ('a', keep = 'last')
    Из [287]:
           а б в
    1 один год 0,309500
    4 два х -0,3
    5 три x -1.964475
    6 четыре x 1,298329
    
    В [288]: df2.drop_duplicates ('a', keep = False)
    Из [288]:
           а б в
    5 три х -1.964475
    6 четыре x 1,298329
     

    Также вы можете передать список столбцов для выявления дубликатов.

     В [289]: df2.duplicated (['a', 'b'])
    Из [289]:
    0 ложно
    1 ложь
    2 ложно
    3 ложь
    4 Верно
    5 ложно
    6 ложь
    dtype: bool
    
    В [290]: df2.drop_duplicates (['a', 'b'])
    Из [290]:
           а б в
    0 один x -1.067137
    1 один год 0,309500
    2 два х -0,211056
    3 два года -1.842023
    5 три x -1.964475
    6 четыре x 1,298329
     

    Чтобы удалить дубликаты по значению индекса, используйте индекс .дублированный , затем выполните нарезку. Тот же набор опций доступен для параметра keep .

     В [291]: df3 = pd.DataFrame ({'a': np.arange (6),
       .....: 'b': np.random.randn (6)},
       .....: index = ['a', 'a', 'b', 'c', 'b', 'a'])
       .....:
    
    В [292]: df3
    Из [292]:
       а б
    а 0 1,440455
    а 1 2.456086
    б 2 1.038402
    в 3 -0,894409
    б 4 0,683536
    а 5 3,082764
    
    В [293]: df3.index.duplicated ()
    Выход [293]: массив ([Ложь, Истина, Ложь, Ложь, Истина, Истина])
    
    В [294]: df3 [~ df3.index.duplicated ()]
    Из [294]:
       а б
    а 0 1,440455
    б 2 1.038402
    в 3 -0,894409
    
    В [295]: df3 [~ df3.index.duplicated (keep = 'last')]
    Из [295]:
       а б
    в 3 -0,894409
    б 4 0,683536
    а 5 3,082764
    
    В [296]: df3 [~ df3.index.duplicated (keep = False)]
    Из [296]:
       а б
    в 3 -0,894409
     

    Аналогично словарю

    get () method¶

    Каждый из Series или DataFrame имеет метод get , который может возвращать значение по умолчанию.

     В [297]: s = pd.Серии ([1, 2, 3], index = ['a', 'b', 'c'])
    
    В [298]: s.get ('a') # эквивалентно s ['a']
    Из [298]: 1
    
    В [299]: s.get ('x', по умолчанию = -1)
    Вых [299]: -1
     

    Поиск значений по индексам / меткам столбцов¶

    Иногда требуется извлечь набор значений из последовательности меток строк. и метки столбцов, это может быть достигнуто с помощью DataFrame.melt , объединенного путем фильтрации соответствующих строк с DataFrame.loc . Например:

     В [300]: df = pd.DataFrame ({'col': ["A", "A", "B", "B"],
       .....: 'A': [80, 23, np.nan, 22],
       .....: 'B': [80, 55, 76, 67]})
       .....:
    
    В [301]: df
    Из [301]:
      столбец A B
    0 А 80,0 80
    1 А 23,0 55
    2 Б NaN 76
    3 В 22,0 67
    
    В [302]: melt = df.melt ('col')
    
    В [303]: melt = melt.loc [melt ['col'] == melt ['переменная'], 'значение']
    
    В [304]: melt.reset_index (drop = True)
    Из [304]:
    0 80,0
    1 23,0
    2 76,0
    3 67,0
    Имя: значение, dtype: float64
     

    Ранее этого можно было достичь с помощью выделенного DataFrame .поиск метод который устарел в версии 1.2.0.

    Объекты индекса¶

    Класс pandas Index и его подклассы можно рассматривать как реализация упорядоченного мультимножества . Дубликаты разрешены. Однако, если вы попробуете для преобразования объекта Index с повторяющимися записями в установить , будет возбуждено исключение.

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

     В [305]: index = pd.Index (['e', 'd', 'a', 'b'])
    
    В [306]: индекс
    Out [306]: индекс (['e', 'd', 'a', 'b'], dtype = 'object')
    
    В [307]: 'd' в индексе
    Out [307]: Верно
     

    Вы также можете передать имя , которое будет сохранено в индексе:

     В [308]: index = pd.Index (['e', 'd', 'a', 'b'], name = 'something')
    
    В [309]: index.name
    Out [309]: 'что-то'
     

    Имя, если оно задано, будет отображаться на дисплее консоли:

     В [310]: index = pd.Индекс (список (диапазон (5)), имя = 'строки')
    
    В [311]: columns = pd.Index (['A', 'B', 'C'], name = 'cols')
    
    В [312]: df = pd.DataFrame (np.random.randn (5, 3), index = index, columns = columns)
    
    В [313]: df
    Из [313]:
    столбцы A B C
    ряды
    0 1,295989 -1,051694 1,340429
    1 -2,366110 0,428241 0,387275
    2 0,433306 0,929548 0,278094
    3 2,154730 -0,315628 0,264223
    4 1,126818 1,132290 -0,353310
    
    В [314]: df ['A']
    Из [314]:
    ряды
    0 1,295989
    1-2.366110
    2 0,433306
    3 2,154730
    4 1,126818
    Имя: A, dtype: float64
     

    Задание операций над индексными объектами¶

    Двумя основными операциями являются объединение и пересечение . Разница предоставляется с помощью метода .difference () .

     В [325]: a = pd.Index (['c', 'b', 'a'])
    
    В [326]: b = pd.Index (['c', 'e', ​​'d'])
    
    В [327]: а. Разница (б)
    Out [327]: индекс (['a', 'b'], dtype = 'object')
     

    Также доступна операция symric_difference , которая возвращает элементы которые появляются либо в idx1 , либо в idx2 , но не в обоих.Это эквивалентно индексу, созданному idx1.difference (idx2) .union (idx2.difference (idx1)) , с дубликатами сброшены.

     В [328]: idx1 = pd.Index ([1, 2, 3, 4])
    
    В [329]: idx2 = pd.Index ([2, 3, 4, 5])
    
    В [330]: idx1.symmetric_difference (idx2)
    Выход [330]: Int64Index ([1, 5], dtype = 'int64')
     

    Примечание

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

    При выполнении Index.union () между индексами с разными типами данных индексы должен быть приведен к общему типу dtype.Обычно, хотя и не всегда, это объект dtype. В Исключением является объединение целочисленных данных и данных с плавающей запятой. В этом случае целочисленные значения преобразуются в число с плавающей запятой

     В [331]: idx1 = pd.Index ([0, 1, 2])
    
    В [332]: idx2 = pd.Index ([0.5, 1.5])
    
    В [333]: idx1.union (idx2)
    Выход [333]: Float64Index ([0.0, 0.5, 1.0, 1.5, 2.0], dtype = 'float64')
     

    Отсутствующие значения¶

    Важно

    Несмотря на то, что Index может содержать пропущенные значения ( NaN ), этого следует избегать если вы не хотите неожиданных результатов.Например, некоторые операции неявно исключить отсутствующие значения.

    Index.fillna заполняет пропущенные значения указанным скалярным значением.

     В [334]: idx1 = pd.Index ([1, np.nan, 3, 4])
    
    В [335]: idx1
    Выход [335]: Float64Index ([1.0, nan, 3.0, 4.0], dtype = 'float64')
    
    В [336]: idx1.fillna (2)
    Выход [336]: Float64Index ([1.0, 2.0, 3.0, 4.0], dtype = 'float64')
    
    В [337]: idx2 = pd.DatetimeIndex ([pd.Timestamp ('2011-01-01'),
       .....: pd.NaT,
       .....: pd.Отметка времени ('2011-01-03')])
       .....:
    
    В [338]: idx2
    Выход [338]: DatetimeIndex (['2011-01-01', 'NaT', '2011-01-03'], dtype = 'datetime64 [ns]', freq = None)
    
    В [339]: idx2.fillna (pd.Timestamp ('2011-01-02'))
    Выход [339]: DatetimeIndex (['2011-01-01', '2011-01-02', '2011-01-03'], dtype = 'datetime64 [ns]', freq = None)
     

    Индекс установки / сброса¶

    Иногда вы загружаете или создаете набор данных в DataFrame и хотите добавить индекс после того, как вы это уже сделали. Есть пара разных способами.

    Установить индекс¶

    DataFrame имеет метод set_index () , который принимает имя столбца (для обычного Index ) или списка имен столбцов (для MultiIndex ). Чтобы создать новый переиндексированный фрейм данных:

     В [340]: данные
    Из [340]:
         а б в г
    0 бар один z 1,0
    1 бар два и 2,0
    2 фу один x 3,0
    3 foo two w 4.0
    
    В [341]: indexed1 = data.set_index ('c')
    
    В [342]: indexed1
    Из [342]:
         а б г
    c
    z bar один 1.0
    у бар два 2,0
    x foo one 3.0
    w foo two 4.0
    
    В [343]: indexed2 = data.set_index (['a', 'b'])
    
    В [344]: indexed2
    Из [344]:
             CD
    а б
    один бар z 1.0
        два года 2,0
    foo one x 3.0
        два w 4.0
     

    Параметр добавить ключевое слово позволяет сохранить существующий индекс и добавить данные столбцы в MultiIndex:

     В [345]: frame = data.set_index ('c', drop = False)
    
    В [346]: frame = frame.set_index (['a', 'b'], append = True)
    
    В [347]: кадр
    Из [347]:
               CD
    такси
    z bar one z 1.0
    у бар два у 2,0
    х фу один х 3,0
    w foo two w 4.0
     

    Другие параметры в set_index позволяют не отбрасывать столбцы индекса или добавлять индекс на месте (без создания нового объекта):

     В [348]: data.set_index ('c', drop = False)
    Из [348]:
         а б в г
    c
    z bar one z 1.0
    y бар два y 2,0
    х фу один х 3,0
    w foo two w 4.0
    
    В [349]: data.set_index (['a', 'b'], inplace = True)
    
    В [350]: данные
    Из [350]:
             CD
    а б
    Бар один z 1.0
        два года 2,0
    foo one x 3.0
        два w 4.0
     

    Сбросить индекс¶

    Для удобства в DataFrame есть новая функция, которая называется reset_index () , который передает значения индекса в Столбцы DataFrame и задает простой целочисленный индекс. Это операция, обратная set_index () .

     В [351]: данные
    Из [351]:
             CD
    а б
    один бар z 1.0
        два года 2,0
    foo one x 3.0
        два w 4.0
    
    В [352]: data.reset_index ()
    Из [352]:
         а б в г
    0 бар один z 1.0
    1 бар два и 2,0
    2 фу один x 3,0
    3 foo two w 4.0
     

    Вывод больше похож на таблицу SQL или массив записей. Имена для столбцы, полученные из индекса, хранятся в атрибуте names .

    Вы можете использовать ключевое слово level , чтобы удалить только часть индекса:

     В [353]: рамка
    Из [353]:
               CD
    такси
    z bar one z 1.0
    у бар два у 2,0
    х фу один х 3,0
    w foo two w 4.0
    
    В [354]: кадр.reset_index (уровень = 1)
    Из [354]:
             а в г
    в б
    z одна полоса z 1,0
    y два бара y 2,0
    х один фу х 3,0
    ш два фу ш 4.0
     

    reset_index принимает необязательный параметр drop , который, если true, просто отбрасывает индекс вместо того, чтобы помещать значения индекса в столбцы DataFrame.

    Добавление специального индекса¶

    Если вы создаете индекс самостоятельно, вы можете просто назначить его полю index :

    Возврат просмотра по сравнению с копией¶

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

     В [355]: dfmi = pd.DataFrame ([список ('abcd'),
       .....: list ('efgh'),
       .....: список ('ijkl'),
       .....: list ('mnop')],
       .....: columns = pd.MultiIndex.from_product ([['один', 'два'],
       .....:                                                         ['первая секунда']]))
       .....:
    
    В [356]: dfmi
    Из [356]:
        один два
      первая секунда первая секунда
    0 а б в г
    1 e f g h
    2 я дж к л
    3 мес.
     

    Сравните эти два метода доступа:

     В [357]: dfmi ['один'] ['второй']
    Из [357]:
    0 б
    1 ж
    2 Дж
    3 п
    Имя: второй, dtype: объект
     
     В [358]: dfmi.loc [:, ('один', 'второй')]
    Из [358]:
    0 б
    1 ж
    2 Дж
    3 п
    Имя: (один, второй), dtype: object
     

    Они оба дают одинаковые результаты, так что же использовать? Поучительно понимать порядок операций над ними и почему метод 2 ( .loc ) намного предпочтительнее, чем метод 1 (связанный [] ).

    dfmi ['one'] выбирает первый уровень столбцов и возвращает DataFrame, который индексируется отдельно. Затем другая операция Python dfmi_with_one ['second'] выбирает серию, проиндексированную 'секундой' .На это указывает переменная dfmi_with_one , потому что pandas видит эти операции как отдельные события. например отдельные вызовы __getitem__ , поэтому он должен рассматривать их как линейные операции, они происходят один за другим.

    Сравните это с df.loc [:, ('one', 'second')] , который передает вложенный кортеж (slice (None), ('one', 'second')) в один вызов к __getitem__ . Это позволяет пандам справляться с этим как с единым целым. Кроме того, этот порядок операций может быть значительно быстрее и позволяет при желании индексировать обе оси .

    Почему присваивание не выполняется при использовании цепной индексации? ¶

    Проблема в предыдущем разделе связана только с производительностью. Что с предупреждение SettingWithCopy ? Мы не используем , как правило, выдает предупреждения, когда вы делаете что-то, что может стоить несколько дополнительных миллисекунд!

    Но оказывается, что присвоение продукту цепной индексации по своей сути непредсказуемые результаты. Чтобы убедиться в этом, подумайте о том, как Python интерпретатор выполняет этот код:

     dfmi.loc [:, ('один', 'второй')] = значение
    # становится
    dfmi.loc .__ setitem __ ((фрагмент (Нет), ('один', 'второй')), значение)
     

    Но этот код обрабатывается иначе:

     dfmi ['one'] ['second'] = значение
    # становится
    dfmi .__ getitem __ ('один') .__ setitem __ ('второй', значение)
     

    Видите там __getitem__ ? Вне простых случаев очень сложно предсказать, вернет ли он представление или копию (это зависит от макета памяти массива, о котором pandas не дает никаких гарантий), и, следовательно, __setitem__ изменит dfmi или временный объект, который будет брошен сразу после этого. Это , о чем предупреждает SettingWithCopy о!

    Примечание

    Вам может быть интересно, стоит ли нам беспокоиться о loc недвижимость в первом примере. Но dfmi.loc гарантированно будет dfmi сам с измененным поведением индексации, поэтому dfmi.loc .__ getitem__ / dfmi.loc .__ setitem__ работает напрямую с dfmi . Конечно, dfmi.loc .__ getitem __ (idx) может быть представлением или копией dfmi .

    Иногда появляется предупреждение SettingWithCopy , когда нет происходит очевидное цепное индексирование. Эти - ошибки, которые SettingWithCopy создан для ловли! панды, вероятно, пытается вас предупредить что вы сделали это:

     def do_something (df):
        foo = df [['bar', 'baz']] # Является ли foo представлением? Копия? Никто не знает!
        # ... здесь много строк ...
        # Мы не знаем, изменит ли это df или нет!
        foo ['quux'] = значение
        return foo
     

    Ура!

    Порядок оценки имеет значение

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

    pandas имеет SettingWithCopyWarning , потому что назначение копии срез часто является не преднамеренным, а ошибкой, вызванной цепным индексированием возвращает копию там, где ожидался фрагмент.

    Если вы хотите, чтобы панды более или менее доверяли назначению связанное выражение индексации, вы можете установить опцию mode.chained_assignment на одно из этих значений:

    • 'warn' , значение по умолчанию, означает, что напечатано SettingWithCopyWarning .

    • 'поднять' означает, что панды поднимут SettingWithCopyException вы должны иметь дело с.

    • Нет полностью подавит предупреждения.

     В [359]: dfb = pd.DataFrame ({'a': ['one', 'one', 'two',
       .....: «три», «два», «один», «шесть»],
       .....: 'c': np.arange (7)})
       .....:
    
    # Это покажет SettingWithCopyWarning
    # но значения кадра будут установлены
    В [360]: dfb ['c'] [dfb ['a'].str.startswith ('o')] = 42
     

    Однако он работает с копией и не будет работать.

     >>> pd.set_option ('mode.chained_assignment', 'предупреждать')
    >>> dfb [dfb ['a']. str.startswith ('o')] ['c'] = 42
    Отслеживание (последний вызов последний)
         ...
    SettingWithCopyWarning:
         Значение пытается быть установлено на копии фрагмента из DataFrame.
         Попробуйте вместо этого использовать .loc [row_index, col_indexer] = value
     

    Цепное присвоение может также возникнуть в настройке в кадре смешанного типа dtype.

    Примечание

    Эти правила настройки применяются ко всем .loc / .iloc .

    Ниже приводится рекомендуемый метод доступа с использованием .loc для нескольких элементов (с использованием маски ) и одного элемента с использованием фиксированного индекса:

     В [361]: dfc = pd.DataFrame ({'a': ['one', 'one', 'two',
       .....: «три», «два», «один», «шесть»],
       .....: 'c': np.arange (7)})
       .....:
    
    В [362]: dfd = dfc.copy ()
    
    # Установка нескольких элементов с помощью маски
    В [363]: маска = dfd ['a'].str.startswith ('о')
    
    В [364]: dfd.loc [маска, 'c'] = 42
    
    В [365]: dfd
    Из [365]:
           а с
    0 один 42
    1 один 42
    2 два 2
    3 три 3
    4 два 4
    5 один 42
    6 шесть 6
    
    # Установка одного элемента
    В [366]: dfd = dfc.copy ()
    
    В [367]: dfd.loc [2, 'a'] = 11
    
    В [368]: dfd
    Из [368]:
           а с
    0 один 0
    1 один 1
    2 11 2
    3 три 3
    4 два 4
    5 один 5
    6 шесть 6
     

    Следующий может работать время от времени, но это не гарантируется, и поэтому его следует избегать:

     В [369]: dfd = dfc.копия ()
    
    В [370]: dfd ['a'] [2] = 111
    
    В [371]: dfd
    Из [371]:
           а с
    0 один 0
    1 один 1
    2 111 2
    3 три 3
    4 два 4
    5 один 5
    6 шесть 6
     

    Наконец, в следующем примере не будет работать , поэтому его следует избегать:

     >>> pd.set_option ('mode.chained_assignment', 'поднять')
    >>> dfd.loc [0] ['a'] = 1111
    Отслеживание (последний вызов последний)
         ...
    SettingWithCopyException:
         Значение пытается быть установлено на копии фрагмента из DataFrame.Попробуйте вместо этого использовать .loc [row_index, col_indexer] = value
     

    Предупреждение

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

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *