Как отфильтровать dataframe в python

Подсчет и фильтрация строк в DataFrame Pandas

Чтобы подсчитать количество строк в DataFrame, вы можете использовать свойство shape или метод count().

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

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

Пример 1: подсчет с помощью shape

В этом примере мы будем использовать свойство DataFrame.shape, чтобы получить количество строк.

Пример 2: с помощью count()

В этом примере мы будем использовать метод count() для подсчета количества строк в DataFrame.

В этом руководстве на примерах Python мы узнали, как подсчитать количество строк в заданном DataFrame разными способами с помощью примеров программ.

Фильтрации строк

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

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

Пример 1: с помощью isin()

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

Функция isin() возвращает True для строк, значения столбца в которых находятся в диапазоне (3,6). В противном случае функция возвращает false.

df [out] возвращает только те строки, значение которых равно True, что приводит к отфильтрованному выводу.

Пример 2: с помощью query()

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

Мы будем использовать query() для фильтрации строк.

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

Источник

All the Ways to Filter Pandas Dataframes

Как отфильтровать dataframe в python

Pandas is by far one of the essential tools required for data work within Python. It offers many different ways to filter Pandas dataframes – this tutorial shows you all the different ways in which you can do this!

Specifically, you’ll learn how to easily use index and chain methods to filter data, use the filter function, the query function, and the loc function to filter data.

Filter Pandas Dataframes Video Tutorial

Loading the Sample Dataframe

Let’s begin by loading a sample dataframe that we’ll use throughout the tutorial.

We used the parse_dates parameter to ensure that the Dates column was read as datetime.

Filter Pandas Dataframe by Column Value

Pandas makes it incredibly easy to select data by a column value. This can be accomplished using the index chain method.

Select Dataframe Values Greater Than Or Less Than

For example, if you wanted to select rows where sales were over 300, you could write:

We can see from the shape method that 352 rows have been filtered out of the dataset.

Filtering a Dataframe based on Multiple Conditions

If you want to filter based on more than one condition, you can use the ampersand (&) operator or the pipe (|) operator, for and and or respectively.

Let’s try an example. First, you’ll select rows where sales are greater than 300 and units are greater than 20. Then you’ll do the same with an or operator:

Filter a Dataframe Based on Dates

Pandas also makes it very easy to filter on dates. You can filter on specific dates, or on any of the date selectors that Pandas makes available.

If you want to filter on a specific date (or before/after a specific date), simply include that in your filter query like above:

The first piece of code shows any rows where Date is later than May 1, 2020. You can also use multiple filters to filter between two dates:

This filters down to only show May 2020 data.

Using Pandas Date Selectors to Filter Data

Pandas date selectors allow you to access attributes of a particular date. Let’s see how these work in action:

Here we’ve assigned new columns, based on accessing just a single part of the Date column:

You can use these date selectors to filter your data.

If you only wanted to show data for Tuesdays, you could use the weekday selector:

This type of selecting data is incredibly helpful if you want to filter down to a specific year or month, and don’t want to type and conditions.

It makes your code much easier to write (and to read).

Filter a Dataframe to a Specific String

If you want to filter rows to only show rows where there is a specific exists, you can do this also with the index method. Say you wanted to select only rows from East region:

Filter To Show Rows Starting with a Specific Letter

Similarly, you can select only dataframe rows that start with a specific letter. For example, if you only wanted to select rows where the region starts with ‘E’, you could write:

Select Dataframe Rows based on List of Values

If you want to select rows matching a set of values, you could write long “or” statements, or you could use the isin method.

For example, if you wanted to select records from East and West Regions, you could write:

Or, you could use the isin method, to make this much easier:

This returns the same thing but is much easier to write!

Select Dataframe Rows Using Regular Expressions (Regex)

For example, if you wanted to filter to show only records that end in “th” in the Region field, you could write:

To learn more about regex, check out this link.

Select Null or Not Null Dataframe Rows

Pandas makes it easy to select select either null or non-null rows.

To select records containing null values, you can use the both the isnull and any functions:

If you only want to select records where a certain column has null values, you could write:

To select only records with non-null records

To select only records that are not null, you can use the notnull function:

How to use the Pandas Query Function

The query function takes an expression that evaluates to a boolean statement and uses that to filter a dataframe.

For example, you can use a simple expression to filter down the dataframe to only show records with Sales greater than 300:

To query based on multiple conditions, you can use the and or the or operator:

How to use the Loc and iloc Functions in Pandas

The loc and iloc functions can be used to filter data based on selecting a column or columns and applying conditions.

Tip! To get a deep dive into the loc and iloc functions, check out my complete tutorial on these functions by clicking here.

For example, to select data from East region, you could write:

Conclusion

In this post, we covered off many ways of selecting data using Pandas. We used examples to filter a dataframe by column value, based on dates, using a specific string, using regex, or based on items in a list of values. We also covered how to select null and not null values, used the query function, as well as the loc function.

To learn more about date selectors, check out the official documentation here.

Как отфильтровать dataframe в python

Check out my ebook to get started with Python for Data Science!

Источник

Как отфильтровать датафрейм Pandas за 3 минуты

Как отфильтровать dataframe в python

В Pandas есть много способов отфильтровать DataFrame. Я познакомлю вас с наиболее важными вариантами с помощью Симпсонов.

Логическое индексирование

Пример 1. Выбор строк с определенным значением.

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

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

Мы увидим саксофон, автомобили и рогатки в телевизионной рекламе.

Также Симпсоны должны экономить деньги. Новые правила:

2) можно заказывать не более 3 предметов на человека

Я надеюсь, что Гомер и Барт останутся с нами и не покинут шоу в ярости…

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

Позиционная индексация

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

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

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

Вывод

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

Источник

iPython R Rapid Miner

В iPython мои (черновики) упражнения с Python, в разделе «Mining» собраны материалы по R, Rapid Miner, Weka, Gate. в «Projects» фрагменты старых и заготовки для новых исследований. записано для себя, открыто для всех.

Поиск по блогу

Страницы

суббота, 18 апреля 2015 г.

n1_yModelBrandt2014y32013y3u1413y31413y32014m32013m3u1413m31413m3Datem
01GrantaLada4557052765(7,195)-14%1307715596(2,519)-16%30-4-2014
12SolarisHyundai3521835941(723)-2%977410553(779)-7%30-4-2014
23New RioKIA29971282111,7606%904584306157%30-4-2014

How to filter the DataFrame rows of pandas by “within”/“in”?¶

Как отобрать строки по численным значениям в столбце? Очень просто.

n1_yModelBrandt2014y32013y3u1413y31413y32014m32013m3u1413m31413m3Datem
01GrantaLada4557052765(7,195)-14%1307715596(2,519)-16%30-4-2014
12SolarisHyundai3521835941(723)-2%977410553(779)-7%30-4-2014
23New RioKIA29971282111,7606%904584306157%30-4-2014
34DusterRenault28153259452,2089%7606760060%30-4-2014
45KalinaLada2586428395(2,531)-9%77318857(1,126)-13%30-4-2014
n1_yModelBrandt2014y32013y3u1413y31413y32014m32013m3u1413m31413m3Datem
23New RioKIA29971282111,7606%904584306157%30-4-2014
34DusterRenault28153259452,2089%7606760060%30-4-2014
45KalinaLada2586428395(2,531)-9%77318857(1,126)-13%30-4-2014

Есть список значений. Выберем из фрейма по этому списку (строк или чисел)¶

n1_yModelBrandt2014y32013y3u1413y31413y32014m32013m3u1413m31413m3Datem
12SolarisHyundai3521835941(723)-2%977410553(779)-7%30-4-2014
34DusterRenault28153259452,2089%7606760060%30-4-2014
n1_yModelBrandt2014y32013y3u1413y31413y32014m32013m3u1413m31413m3Datem
23New RioKIA29971282111,7606%904584306157%30-4-2014
34DusterRenault28153259452,2089%7606760060%30-4-2014

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

ВНИМАНИЕ. Зто отрицание, которое меняет условие на противоположное.

n1_yModelBrandt2014y32013y3u1413y31413y32014m32013m3u1413m31413m3Datem
34DusterRenault28153259452,2089%7606760060%30-4-2014
n1_yModelBrandt2014y32013y3u1413y31413y32014m32013m3u1413m31413m3Datem
23New RioKIA29971282111,7606%904584306157%30-4-2014

isin() is ideal if you have a list of exact matches, but if you have a list of partial matches or substrings to look for, you can filter using the str.contains method and regular expressions.

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

n1_yModelBrandt2014y32013y3u1413y31413y32014m32013m3u1413m31413m3Datem
23New RioKIA29971282111,7606%904584306157%30-4-2014
2021SportageKIA997910358(379)-4%25262857(331)-12%30-4-2014
n1_yModelBrandt2014y32013y3u1413y31413y32014m32013m3u1413m31413m3Datem
23New RioKIA29971282111,7606%904584306157%30-4-2014
2021SportageKIA997910358(379)-4%25262857(331)-12%30-4-2014
n1_yModelBrandt2014y32013y3u1413y31413y32014m32013m3u1413m31413m3Datem
1213Octavia A7Škoda131710NaNNaN37530NaNNaN30-4-2014
n1_yModelBrandt2014y32013y3u1413y31413y32014m32013m3u1413m31413m3Datem
01GrantaLada4557052765(7,195)-14%1307715596(2,519)-16%30-4-2014
12SolarisHyundai3521835941(723)-2%977410553(779)-7%30-4-2014

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

.str.contains и регулярные выражения¶

n1_yModelBrandt2014y32013y3u1413y31413y32014m32013m3u1413m31413m3Datem
01GrantaLada4557052765(7,195)-14%1307715596(2,519)-16%30-4-2014
12SolarisHyundai3521835941(723)-2%977410553(779)-7%30-4-2014
n1_yModelBrandt2014y32013y3u1413y31413y32014m32013m3u1413m31413m3Datem

Вот вариант отобрать строки, в которых нет пропусков данных NaN

n1_yModelBrandt2014y32013y3u1413y31413y32014m32013m3u1413m31413m3Datem
01GrantaLada4557052765(7,195)-14%1307715596(2,519)-16%30-4-2014
12SolarisHyundai3521835941(723)-2%977410553(779)-7%30-4-2014
n1_yModelBrandt2014y32013y3u1413y31413y32014m32013m3u1413m31413m3Datem
01GrantaLada4557052765(7,195)-14%1307715596(2,519)-16%30-4-2014
12SolarisHyundai3521835941(723)-2%977410553(779)-7%30-4-2014

А теперь попробуем неработавшиий ранее (из-за пропусков) пример и снова получим ту же ошибку:

n1_yModelBrandt2014y32013y3u1413y31413y32014m32013m3u1413m31413m3Datem

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

How to drop rows of Pandas dataframe whose value of certain column is NaN¶

n1_yModelBrandt2014y32013y3u1413y31413y32014m32013m3u1413m31413m3Datem
1011LoganRenault1434216674(2,332)-14%37964890(1,094)-22%30-4-2014
1112SanderoRenault1377714464(687)-5%37964084(288)-7%30-4-2014
13144×4Lada1293114599(1,668)-11%37843808(24)-1%30-4-2014
1415RAV 4Toyota12501114101,09110%43914974(583)-12%30-4-2014
1516CruzeChevrolet1236314565(2,202)-15%30144284(1,270)-30%30-4-2014

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

n1_yModelBrandt2014y32013y3u1413y31413y32014m32013m3u1413m31413m3Datem
1011LoganRenault1434216674(2,332)-14%37964890(1,094)-22%30-4-2014
1112SanderoRenault1377714464(687)-5%37964084(288)-7%30-4-2014
1213Octavia A7Škoda131710NaNNaN37530NaNNaN30-4-2014
13144×4Lada1293114599(1,668)-11%37843808(24)-1%30-4-2014
1415RAV 4Toyota12501114101,09110%43914974(583)-12%30-4-2014

Еще раз обращаю внимание на этот пост, здесь все варианты ответов How to drop rows of Pandas dataframe whose value of certain column is NaN¶

И вот этот вариант тоже рабочий

А вот этот наворот с numpy у меня не работает.

Теперь мы можем решить задачку, когда в столбце есть Nan¶

Сначала мы убираем строки, в которых есть Nan в столбце ‘u1413m3’, создаем новый объект DataFrame, а с ним уже работает метод str.contains()

n1_yModelBrandt2014y32013y3u1413y31413y32014m32013m3u1413m31413m3Datem
1718FocusFord1092322278(11,355)-51%25495546(2,997)-54%30-4-2014

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

Оказывается, что нельзя. Начинается переиндексация, а потом, когда выясняется, что старый индекс поломан после того, как убрали строку с Nan, то встает вопрос, какой индекс использовать:

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *