Привлечение множества панд_中

анализ данных
Привлечение множества панд_中

Общественный номер: You Er Hut
Автор: Питер
Редактор: Питер

Серия Pandas _Фильтрация данных DataFrame_ Средний

В Pandas действительно много способов фильтрации данных. Многие распространенные операции выборки были представлены в предыдущей статье. Методы, выделенные в этой статье:

  • количество выражений
  • запрос, уровень
  • filter
  • где, маска

Расширенное чтение

Для серийных статей о пандах, пожалуйста, прочитайте:

1,Фильтр данных DataFrame_on

2,10 способов создания данных типа DataFrame

3.Создание данных типа серии

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 методов выборки подробно представлены ниже:

  1. количество выражений
  2. query() принимает число
  3. eval() принимает число
  4. filter() принимает число
  5. где/номер маски

количество выражений

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

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 парах функций для фильтрации данных.