Общественный номер: You Er Hut
Автор: Питер
Редактор: Питер
Серия Pandas _Фильтрация данных DataFrame_ Средний
В Pandas действительно много способов фильтрации данных. Многие распространенные операции выборки были представлены в предыдущей статье. Методы, выделенные в этой статье:
- количество выражений
- запрос, уровень
- filter
- где, маска
Расширенное чтение
Для серийных статей о пандах, пожалуйста, прочитайте:
2,10 способов создания данных типа DataFrame
4.Все начинается с функции взрыва
Аналоговые данные
Ниже приведены полностью смоделированные данные, в том числе: имя, пол, возраст, математика, язык, общий балл, адрес, всего 7 полей информации.
import pandas as pd
import numpy as np
df = pd.DataFrame({
"name":['小明','小王','张菲','关宇','孙小小','王建国','刘蓓'],
"sex":['男','女','女','男','女','男','女'],
"age":[20,23,18,21,25,21,24],
"math":[120,130,118,120,102,140,134],
"chinese":[100,130,140,120,149,111,118],
"score":[590,600,550,620,610,580,634],
"address":["广东省深圳市南山区",
"北京市海淀区",
"湖南省长沙市雨花区",
"北京市东城区",
"广东省广州市白云区",
"湖北省武汉市江夏区",
"广东省深圳市龙华区"
]
})
df
5 методов выборки подробно представлены ниже:
- количество выражений
- query() принимает число
- eval() принимает число
- filter() принимает число
- где/номер маски
количество выражений
Выборка выражения относится к выборке путем указания одного или нескольких условий фильтрации с помощью выражения.
1. Укажите математическое выражение
# 1、数学表达式
df[df['math'] > 125]
2. Обратная операция
Операция отрицания достигается символом ~
# 2、取反操作
df[~(df['sex'] == '男')] # 取出不是男生的数据
3. Укажите значение атрибута, чтобы быть конкретными данными
# 3、指定具体数据
df[df.sex == '男'] # 等同于 df[df['sex'] == '男']
4. Выражения неравенства
# 4、比较表达式
df[df['math'] > df['chinese']]
5. Логические операторы
# 5、逻辑运算符
df[(df['math'] > 120) & (df['chinese'] < 140)]
функция запроса()
Инструкции по применению
⚠️ При его использовании следует отметить, что если в наших атрибутах столбца есть пробелы, нам нужно использовать обратные кавычки, чтобы заключить их перед их использованием.
Случаи применения
1. Используйте числовые выражения
df.query('math > chinese > 110')
df.query('math + chinese > 255')
df.query('math == chinese')
df.query('math == chinese > 120')
df.query('(math > 110) and (chinese < 135)') # 两个不等式
2. Используйте символьные выражения
df.query('sex != "女"') # 不等于女,就是全部男
df.query('sex not in ("女")') # 不在女中就是男
df.query('sex in ("男","女")') # 性别在男女中就是全部人
3. Входящие переменные; переменные должны иметь префикс @, когда они используются
# 设置变量
a = df.math.mean()
a
df.query('math > @a + 10')
df.query('math < (`chinese` + @a) / 2')
функция оценки()
Функция eval используется так же, как и функция запроса.
1. Используйте числовые выражения
# 1、数值型表达式
df.eval('math > 125') # 得到的是bool表达式
df[df.eval('math > 125')]
df[df.eval('math > 125 and chinese < 130')]
2. Выражение характера
# 2、字符型表达式
df[df.eval('sex in ("男")')]
3. Используйте переменные
# 3、使用变量
b = df.chinese.mean() # 求均值
df[df.eval('math < @b+5')]
функция фильтра
Мы можем использовать фильтр для фильтрации имени столбца или имени строки, используя метод:
- прямое обозначение
- Обычное обозначение
- нечеткое обозначение
где ось=1 указывает имя столбца, а ось=0 указывает индекс
Инструкции по применению
Случаи применения
1. Непосредственно укажите имя атрибута
df.filter(items=["chinese","score"]) # 列名操作
Укажите индекс строки напрямую
df.filter(items=[2,4],axis=0) # 行筛选
2. Указать через штатный
df.filter(regex='a',axis=1) # 列名中包含
df.filter(regex='^s',axis=1) # 列名以s开始
df.filter(regex='e$',axis=1) # 列名以e结束
df.filter(regex='3$',axis=0) # 行索引包含3
3. Нечеткое обозначение
df.filter(like='s',axis=1) # 列名中包含s
df.filter(like='2',axis=0) # 行索引包含2
# 同时指定列名和索引
df.filter(regex='^a',axis=1).filter(like='2',axis=0)
где и функции маски
Функции where и mask представляют собой пару противоположных функций, и результаты прямо противоположны:
- где: извлеките данные, соответствующие требованиям, и отобразите данные, которые не соответствуют требованиям, как NaN
- маска: вынуть данные, которые не соответствуют требованиям, а удовлетворяющие отображаются как NaN
Оба метода будут устанавливать значения NaN в указанные нами данные.
где использовать
s = df["score"]
s
# where:满足条件的直接显示,不满足的显示为NaN
s.where(s>=600)
Мы можем присваивать значения данным, которые не соответствуют требованиям:
# 我们可以给不满足的进行赋值
s.where(s>=610,600) # 不满足条件的赋值为600
Взгляните на сравнение двух наборов результатов:
Функция where также может указывать несколько условий:
# 符合条件的返回True,不符合的返回False
df.where((df.sex=='男') & (df.math > 125))
Выбираем нужные нам данные:
df[(df.where((df.sex=='男') & (df.math > 125)) == df).name]
# df[(df.where((df.sex=='男') & (df.math > 125)) == df).sex] 效果相同
функция маски
Результат, полученный функцией маски, противоположен тому, где
s.mask(s>=600) # 和where相反:返回的都是小于600的数据
s.mask(s>=610, 600) # 不满足条件的赋值为600
Функция маски принимает несколько условий:
# 取值和where相反
df[(df.mask((df.sex=='男') & (df.math > 125)) == df).sex]
Суммировать
В Pandas действительно есть разные способы получения чисел, слишком много методов для получения нужных нам данных, и иногда одни и те же данные можно получить разными способами. В этой статье основное внимание уделяется обработке чисел с помощью выражений и функций 5. В следующей статье мы сосредоточимся на 3 парах функций для фильтрации данных.