Последняя статья: Игра с пандами и получение чисел

pandas
Последняя статья: Игра с пандами и получение чисел

dataframe data filter_down

Это будет последний пост о фильтрации данных DataFrame, посвященный использованию 3 пар функций:

  • iloc и loc, самые важные, пара часто используемых функций
  • в и иат
  • каждый и все

Важные учебные материалы:pandas.друзья попали на него.org/pandas-docs…

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

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

Данные моделирования

В этой статье моделируются два набора данных:

  • Индекс первой копии - тип символа
  • Второй индекс использует числовой тип по умолчанию.
import pandas as pd
import numpy as np
# 第一份模拟数据df0

df0 = pd.DataFrame(
    [[101, 102, 140], [114, 95, 67], [87, 128, 117]],
    index=['语文', '数学', '英语'],
    columns=['小明', '小红',"小孙"])

df0

#  第二份模拟数df

df = pd.DataFrame({
    "name":['小明','小王','张菲','关宇','孙小小','王建国','刘蓓'],
    "sex":['男','女','女','男','女','男','女'],
    "age":[20,23,18,21,25,21,24],
    "score":[np.nan,600,550,np.nan,610,580,634],  # 缺失两条数据
    "address":[
        "广东省深圳市南山区",
        np.nan,  # 数据缺失
        "湖南省长沙市雨花区",
        "北京市东城区",
        "广东省广州市白云区",
        "湖北省武汉市江夏区",
        "广东省深圳市龙华区"
        ]
})

df

илок и лок

iloc фильтрует по значению, loc фильтрует по атрибуту или имени индекса строки

iloc

Непосредственно укажите значение и выньте одну строку записей

# 1、使用数值

df1 = df.iloc[1]  # 单个数值取出的行记录
df1

# 结果
name          小王
sex            女
age           23
score      600.0
address      NaN
Name: 1, dtype: object

Используйте двоеточие для всех

df1 = df.iloc[1,:]  # :冒号表示全部
df1

# 结果
name          小王
sex            女
age           23
score      600.0
address      NaN
Name: 1, dtype: object

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

df1 = df.iloc[:3]  # 取出前3行记录
df1

Выньте непоследовательные многострочные записи:

df2 = df.iloc[[1,2,4]]  # 取出多行记录
df2
name sex age score address
1 маленький король Женский 23 600.0 NaN
2 Чжан Фэй Женский 18 550.0 Район Юйхуа, город Чанша, провинция Хунань
4 Сунь Сяосяо Женский 25 610.0 Район Байюнь, город Гуанчжоу, провинция Гуандун
# 2、取出行记录的部分列属性

df3 = df.iloc[2,0:2]
df3

# 结果
name    张菲
sex      女
Name: 2, dtype: object
# 列方向上使用切片,步长为2

df4 = df.iloc[2,0:5:2]  
df4

# 结果
name              张菲
age               18
address    湖南省长沙市雨花区
Name: 2, dtype: object
# 行索引为2,列索引号为1 和 3

df5 = df.iloc[2,[1,3]]  
df5

# 结果
sex          女
score    550.0
Name: 2, dtype: object
# 3、取出具体的值

df6 = df.iloc[2,4]
df6

# 结果
'湖南省长沙市雨花区'

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

# 4、行和列方向同时使用切片

df7 = df.iloc[0:4,0:6:2]
df7

Сравните с исходными данными:

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

# 5、取出不连续的行列数据,使用np.r_

df8 = df.iloc[:, np.r_[0,2:4]]
df8
name age score
0 Сяо Мин 20 NaN
1 маленький король 23 600.0
2 Чжан Фэй 18 550.0
3 Гуань Юй 21 NaN
4 Сунь Сяосяо 25 610.0
5 Ван Цзянго 21 580.0
6 Лю Бэй 24 634.0
df9 = df.iloc[np.r_[0,2:4],:]
df9
name sex age score address
0 Сяо Мин мужчина 20 NaN Район Наньшань, город Шэньчжэнь, провинция Гуандун
2 Чжан Фэй Женский 18 550.0 Район Юйхуа, город Чанша, провинция Хунань
3 Гуань Юй мужчина 21 NaN Район Дунчэн, Пекин

loc

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

# 1、取出单个列

df10 = df.loc[:,"name"]  
df10
0     小明
1     小王
2     张菲
3     关宇
4    孙小小
5    王建国
6     刘蓓
Name: name, dtype: object
# 2、取数多个列

df11 = df.loc[:,["name","age"]]  
df11

#  3、使用数值,取出第一行,索引为0

df12 = df.loc[0]
df12

name              小明
sex                男
age               20
score            NaN
address    广东省深圳市南山区
Name: 0, dtype: object
# 4、取出索引为0,1,3的行记录,此时列字段是全部保留

df13 = df.loc[[0,1,3]]
df13

# 使用冒号:,表示全部列,效果同上

df14 = df.loc[[0,1,3],:]  
df14

# 5、取出部分行和部分列

df15 = df.loc[[0,1,3],["name","sex","score"]]
df15

# 6、!!!使用索引切片:同时包含起止位置

df16 = df.loc[0:3]
df16

df.loc[:]  # 表示所有数据

# 7、列筛选的时候,必须有行元素

# 所有行的name和score两列
df17 = df.loc[:,["name","score"]]
df17
name score
0 Сяо Мин NaN
1 маленький король 600.0
2 Чжан Фэй 550.0
3 Гуань Юй NaN
4 Сунь Сяосяо 610.0
5 Ван Цзянго 580.0
6 Лю Бэй 634.0
# 所有行的age及后面全部列

df18 = df.loc[:,"age":]
df18
age score address
0 20 NaN Район Наньшань, город Шэньчжэнь, провинция Гуандун
1 23 600.0 NaN
2 18 550.0 Район Юйхуа, город Чанша, провинция Хунань
3 21 NaN Район Дунчэн, Пекин
4 25 610.0 Район Байюнь, город Гуанчжоу, провинция Гуандун
5 21 580.0 Район Цзянся, город Ухань, провинция Хубэй
6 24 634.0 Район Лунхуа, город Шэньчжэнь, провинция Гуандун
# 8、部分行,age及其后面的全部列

# 谨记:包含起止位置,这是和python切片不同的地方

df19 = df.loc[1:3,"age":]
df19
age score address
1 23 600.0 NaN
2 18 550.0 Район Юйхуа, город Чанша, провинция Хунань
3 21 NaN Район Дунчэн, Пекин
# 9、针对非数值型行索引的取数

df20 = df0.loc["语文"]
df20
小明    101
小红    102
小孙    140
Name: 语文, dtype: int64
# 10、注意两个方括号取出的是DataFrame数据,单个括号是Series型数据

df0.loc[["语文"]]
Сяо Мин немного красный маленькое солнышко
язык 101 102 140
df0.loc[["语文","英语"]]
Сяо Мин немного красный маленькое солнышко
язык 101 102 140
английский 87 128 117
# 11、取出部分行和列数据

df21 = df0.loc[["语文","英语"],"小明"]  
df21

语文    101
英语     87
Name: 小明, dtype: int64
df0.loc[["语文","英语"],["小明","小孙"]]  
Сяо Мин маленькое солнышко
язык 101 140
английский 87 117
# 12、直接使用行索引名来取数

df0.loc[["语文","英语"]]
Сяо Мин немного красный маленькое солнышко
язык 101 102 140
английский 87 128 117

Сравните два

df.loc[[1,2]]
name sex age score address
1 маленький король Женский 23 600.0 NaN
2 Чжан Фэй Женский 18 550.0 Район Юйхуа, город Чанша, провинция Хунань
df.iloc[[1,2]]
name sex age score address
1 маленький король Женский 23 600.0 NaN
2 Чжан Фэй Женский 18 550.0 Район Юйхуа, город Чанша, провинция Хунань
# 指定我们需要的列属性名

df.loc[[1,2],["name","score"]]  
name score
1 маленький король 600.0
2 Чжан Фэй 550.0
# 取出第1和2行,0和3列

df.iloc[[1,2],np.r_[0,3]]
name score
1 маленький король 600.0
2 Чжан Фэй 550.0

в и иат

at

Функция at похожа на loc, но функция at извлекает только значение.

df22 = df.at[4,"sex"]
df22

'女'
df.at[2,"name"]

'张菲'
df0
Сяо Мин немного красный маленькое солнышко
язык 101 102 140
математика 114 95 67
английский 87 128 117
# 同时指定索引和列名

df23 = df0.at['语文','小孙']
df23

140
# at、loc连用

df.loc[1].at['age']

23
df
name sex age score address
0 Сяо Мин мужчина 20 NaN Район Наньшань, город Шэньчжэнь, провинция Гуандун
1 маленький король Женский 23 600.0 NaN
2 Чжан Фэй Женский 18 550.0 Район Юйхуа, город Чанша, провинция Хунань
3 Гуань Юй мужчина 21 NaN Район Дунчэн, Пекин
4 Сунь Сяосяо Женский 25 610.0 Район Байюнь, город Гуанчжоу, провинция Гуандун
5 Ван Цзянго мужчина 21 580.0 Район Цзянся, город Ухань, провинция Хубэй
6 Лю Бэй Женский 24 634.0 Район Лунхуа, город Шэньчжэнь, провинция Гуандун
# 列名为name的第4个元素
df.name.at[4]   

'孙小小'

iat

Как и iloc, поддерживает операции только с числовыми индексами.

df24 = df.iat[2,4]
df24

'湖南省长沙市雨花区'
df.loc[2].iat[4]

'湖南省长沙市雨花区'
df.iloc[2].iat[4]

'湖南省长沙市雨花区'

каждый и все

  • any: True, если хотя бы один из них True
  • all: все результаты должны быть истинными, чтобы быть верными

Когда входящая ось = 1, запрос будет выполняться по строке; ось = 0 означает запрос по столбцу

Сравнение данных в сериях

# 两个False通过any结果为False

pd.Series([False, False]).any()   # False
pd.Series([True, False]).any()  # True
pd.Series([True, False]).all()  # False
# any:是否跳过空值

pd.Series([np.nan]).any()  # False
pd.Series([np.nan]).any(skipna=False)  # True
# all:是否跳过空值

pd.Series([np.nan]).all()  # True
pd.Series([np.nan]).all(skipna=False)  #True  

Сравнение в DataFrame

df0
Сяо Мин немного красный маленькое солнышко
язык 101 102 140
математика 114 95 67
английский 87 128 117
# 1、取出待查询的数据
df0.loc[:,["小明","小红"]]
Сяо Мин немного красный
язык 101 102
математика 114 95
английский 87 128
# 2、进行比较
df0.loc[:,["小明","小红"]] >= 100
Сяо Мин немного красный
язык True True
математика True False
английский False True

any

# 3、使用any函数筛选

df0[(df0.loc[:,["小明","小红"]] >= 100).any(1)]

all

Только язык может удовлетворить 3 человек одновременно, и все они больше 100 человек.

# 4、使用all函数筛选:只有语文满足3个人同时大于100

df0[(df0.loc[:,["小明","小红"]] >= 100).all(1)]

Суммировать

В этой статье рассказывается об использовании 3 пар функций в pandas через смоделированные данные. Среди них функции loc и iloc являются очень распространенными и практичными функциями, и они часто используются сами по себе. На данный момент часть фильтрации данных в pandas была полностью представлена. Конечно, представленные методы - это только часть богатых навыков счета панд.Есть много функций и методов, которые читатели должны изучить и освоить самостоятельно.Я надеюсь, что представленные методы будут полезны всем.