Как выбрать строки из фрейма данных на основе значений столбцов?
Предварительное условие: Pandas.Dataframes в Python
Строки фрейма данных могут быть выбраны на основе условий, поскольку мы используем запросы SQL. Различные методы достижения этого объясняются в этой статье с примерами. Для объяснения метода был создан набор данных, который содержит данные о набранных 10 людьми очках в различных играх. Набор данных загружается в фрейм данных и сначала визуализируется. Десять человек с уникальным идентификатором игрока ( Pid ) играли в разные игры с разными идентификаторами игры ( game_id ), и очки, набранные в каждой игре, добавляются в виде записи в таблицу. Некоторые очки игрока не записываются, поэтому в таблице отображается значение NaN.
Note: To get the CSV file used, click here.
Python3
import pandas as pd df=pd.read_csv(r"__your file path__example2.csv")print(df) |
Выход:
Логический метод индексации
В этом методе для указанного условия столбца каждая строка проверяется на истинность / ложь. Строки, которые дают True, будут учитываться для вывода. Этого можно добиться разными способами. Используемый запрос: Выбрать строки, в которых столбец Pid = 'p01'
Example 1: Checking condition while indexing
Python3
# Choose entries with id p01df_new = df[df["Pid"] == "p01"] print(df_new) |
Выход

Пример 2: Указание переменной условия 'маска'
The selected rows are assigned to a new dataframe with the index of rows from old dataframe as an index in the new one and the columns remaining the same.
Python3
# condition maskmask = df["Pid"] == "p01" # new dataframe with selected rowsdf_new = pd.DataFrame(df[mask]) print(df_new) |
Выход

Пример 3: объединение маски и свойства dataframes.values
The query here is Select the rows with game_id ‘g21’.
Python3
# condition with df.values propertymask = df["game_id"].values == "g21" # new dataframedf_new = df[mask] print(df_new) |
Выход

Позиционная индексация
Методы loc () и iloc () могут использоваться для нарезки фреймов данных в Python. Среди различий между loc () и iloc () важно отметить то, что iloc () принимает только целочисленные индексы, в то время как loc () может также принимать логические индексы.
Пример 1: Использование loc ()
The mask gives the boolean value as an index for each row and whichever rows evaluate to true will appear in the result. Here, the query is to select the rows where game_id is g21.
Python3
# for boolean indexingmask = df["game_id"].values == "g21" # using loc() methoddf_new = df.loc[mask] print(df_new) |
Выход

Пример 2: Использование iloc ()
The query is the same as the one taken above. The iloc() takes only integers as an argument and thus, the mask array is passed as a parameter to the numpy’s flatnonzero() function that returns the index in the list where the value is not zero (false)
Python3
# condition maskmask = df["game_id"].values == "g21"print("Mask array :", mask) # getting non zero indicespos = np.flatnonzero(mask)print("
Rows selected :", pos) # selecting rowsdf.iloc[pos] |
Выход

Использование dataframe.query ()
Запрос () принимает выражение, которое возвращает логическое значение, обрабатывает все строки в фрейме данных и возвращает результирующий фрейм данных с выбранными строками.
Example 1: Select rows where name=”Albert”
Python3
df.query("name=="Albert"") |
Выход

Пример 2: выберите ряды, в которых количество очков> 50 и игрок не Альберт.
This example is to demonstrate that logical operators like AND/OR can be used to check multiple conditions.
Python3
df.query("points>50 & name!="Albert"") |
Выход

Использование isin ()
Этот метод фрейма данных принимает в качестве параметра итерацию, серию или другой фрейм данных и проверяет, существуют ли в нем элементы фрейма данных. Строки, которые оцениваются как истинные, считаются результатом.
Example 1: Select the rows where players are Albert, Louis, and John.
Python3
#Players to be selectedli=["Albert","Louis","John"] df[df.name.isin(li)] |
Выход

Пример 2: выберите ряды, в которых очки> 50 и игроки не Альберт, Луис и Джон.
The tiled symbol (~) provides the negation of the expression evaluated.
Python3
# values to be present in selected rowsli = ["Albert", "Louis", "John"] # selecting rows from dataframedf[(df.points > 50) & (~df.name.isin(li))] |
Выход

Использование np.where ()
Функция numpy where () может быть объединена с функцией isin () pandas для получения более быстрого результата. Доказано, что numpy.where () дает результаты быстрее, чем обычные методы, использованные выше.
Example:
Python3
import numpy as np df_new = df.iloc[np.where(df.name.isin(li))] |
Выход

Comparison with other methods
Python3
# to calculate timingimport numpy as np% % timeit # using mixture of numpy and pandas methoddf_new = df.iloc[np.where(df.name.isin(li))] |
Output:
756 µs ± 132 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
Python3
# to calculate time%%timeit li=["Albert","Louis","John"] # Pandas method onlydf[(df.points>50)&(~df.name.isin(li))] |
Выход
1.7 ms ± 307 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
Внимание компьютерщик! Укрепите свои основы с помощью базового курса программирования Python и изучите основы.
Для начала подготовьтесь к собеседованию. Расширьте свои концепции структур данных с помощью курса Python DS. А чтобы начать свое путешествие по машинному обучению, присоединяйтесь к курсу Машинное обучение - базовый уровень.