Начало работы с пандами, навыки, которые вы должны освоить

искусственный интеллект pandas

Начало работы с пандами, навыки, которые вы должны освоить

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

  • Создать данные DataFrame
  • Просмотр информации, связанной с данными
  • Просмотр файлов верхнего и нижнего колонтитула
  • Количество шаблонов
  • количество срезов
  • Использование общих функций

импортный пакет

import pandas as pd
import numpy as np

Используйте совет 1 — создайте данные DataFrame

Способ 1: Создайте сами

df1 = pd.DataFrame({
    "name":["小明","小红","小孙","王小","关宇","刘蓓","张菲"],
    "age":[20,18,27,20,28,18,25],
    "sex":["男","女","男","男","男","女","女"],
    "score":[669,570,642,590,601,619,701],
    "address":["北京","深圳","广州","武汉","深圳","广州","长沙"]
})

df1

Данные следующие:

Способ 2: чтение из локального файла. Теперь есть файл локально:学生信息.xlsxнепосредственно черезpd.read_excel()Читать в:

df2 = pd.read_excel("学生信息.xlsx")
df2

Видно, что эффект тот же, что и выше

Используйте совет 2 — исследование данных

Просмотр формы данных

shape указывает, из скольких строк и столбцов состоят данные:

df1.shape  # (7,5)

Просмотр имен свойств полей

df1.columns

Просмотр типа данных свойства

df1.dtypes

Вы можете видеть, что есть только два типа данных: int64 и object

Проверить недостающие данные

df1.isnull()   # 如果缺失显示为True,否则显示False

df1.isnull().sum() # 统计缺失值的个数。一个True计数一次

Результаты показывают, что в этих данных нет пропущенных значений.

Просмотр индекса строки данных

df1.index

Просмотр информации описания данных

df1.describe

Просмотр статистики данных

Информация о статистике будет отображать только информацию о статистике данных числового типа:

df1.describe()

Результаты статистических значений включают в себя: количество, среднее значение, стандартное отклонение, минимум\максимум, квартиль 25%, медиана 50% и квартиль 75%.

Воспользуйтесь советом 3 — просмотрите файлы head и tail

Методы head и tail могут быстро просмотреть файлы данных head и tail.

head

df1.head()   # 默认是查看前5行数据
df1.head(3)  # 指定显示的行数

tail

df1.tail()    # 默认尾部5行
df1.tail(3)   # 指定尾部3行数据

Используйте Навык 4-Выборочные числа

Возьмите данные, которые мы хотим, из фрейма данных pandas DataFrame и обработайте их.

Получить данные из поля

Выносим данные в столбец name:

name = df1["name"]
name

# 结果
0    小明
1    小红
2    小孙
3    王小
4    关宇
5    刘蓓
6    张菲
Name: name, dtype: object

Извлечение данных из нескольких полей

Например, выносим данные столбцов имени и возраста:

name_age = df1[["name","age"]]  
name_age

# 结果
  name age
0	小明	20
1	小红	18
2	小孙	27
3	王小	20
4	关宇	28
5	刘蓓	18
6	张菲	25

Выбор данных на основе типа поля

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

1. Выберите один тип данных

# 1、选择单个数据类型

df1.select_dtypes(include='int64')

# 结果
  age score
0	20	669
1	18	570
2	27	642
3	20	590
4	28	601
5	18	619
6	25	701

2. Выберите несколько типов одновременно

df1.select_dtypes(include=['int64','object'])

# 结果
  name  age sex score address
0	小明	 20  男	669	   北京
1	小红	 18	 女	570	   深圳
2	小孙	 27	 男	642	   广州
3	王小	 20	 男	590	   武汉
4	关宇	 28	 男	601	   深圳
5	刘蓓	 18	 女	619	   广州
6	张菲	 25	 女	701	   长沙

потому что данные толькоint64,object, поэтому мы выбрали их все.

3. Выберите, чтобы исключить данные, отличные от определенных типов данных:

# 选择除了int64类型之外的数据
# 排除name和score字段之外的数据
df1.select_dtypes(exclude='int64') 

# 结果
  name sex address
0	小明	男	  北京
1	小红	女	  深圳
2	小孙	男	  广州
3	王小	男	  武汉
4	关宇	男	  深圳
5	刘蓓	女	  广州
6	张菲	女	  长沙

Считать по размеру значения

1. Возьмите число непосредственно, судя по размеру:

df1[df1["age"] == 20]  # 年龄等于20
df1[df1["age"] != 20]  # 年龄不等于20
df1[df1["age"] >= 20]  # 年龄大于等于20

2. Несколько условий оценки используются вместе

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

df1[(df1["age"] >= 20) & (df1["age"] < 27)]

Считать по строке

1. Возьмите число по одному условию

# 1、单条数据
df1[df1["name"] == "小明"]  

# 结果
  name  age sex  score address
0	小明	 20	 男	  669  	北京

2. Проведите числа через несколько условий

Выберите имя Сяо Мин или данные, возраст которых превышает 25 лет.

df1[(df1["name"] == "小明") | (df1["age"] > 25)]

# 结果
  name  age sex  score address
0	小明	 20  男	 669	  北京
2	小孙	 27	 男	 642	  广州
4	关宇	 28	 男	 601	  深圳

3. Начальные, конечные и содержащие функции строк

  • str.startswith(string)
  • str.endswith(string)
  • str.contains(string)
# 1、取出以“小”开头的姓名
df1[df1["name"].str.startswith("小")]  # name以"小"开头

# 结果
 name  age sex  score address
0	小明	20	男	   669	北京
1	小红	18	女	   570	深圳
2	小孙	27	男	   642	广州
# 以“关”开始
df1[df1["name"].str.startswith("关")]

# 结果
 name  age sex  score address
4	关宇	28	男	   601	深圳
# 3、以“菲”结尾
df1[df1["name"].str.endswith("菲")]

# 结果
  name  age sex  score address
6	张菲	 25  女	  701	  长沙
# 取出包含“小”的数据:不管小是在开头,还是结尾都会被选出来
df1[df1["name"].str.contains("小")]

# 结果

  name  age sex  score address
0	小明	 20	 男	 669	 北京
1	小红	 18	 女	 570	 深圳
2	小孙	 27	 男	 642	 广州
3	王小	 20	 男	 590	 武汉

выше王小Не начинается с малого, а содержит маленькое, поэтому оно тоже выбрано.

4. Операция обращения строки

Отрицательный знак - тильда:~

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

# 取出不包含小的数据
df1[~df1["name"].str.contains("小")]

# 结果
  name  age sex  score address
4	关宇	 28	 男	 601	  深圳
5	刘蓓	 18	 女	 619	  广州
6	张菲	 25	 女	 701	  长沙

Используйте Навык 5 — Нарезайте и Берите Числа

Нарезка — это концепция, которая существует в Python и может также использоваться в pandas. В слайсах есть 3 понятия: старт, стоп, шаг

  • start: начальный индекс, включая
  • стоп: конечный индекс, исключая
  • шаг: длина шага, которая может быть положительной или отрицательной;

Записывается как: [начало:стоп:шаг]

размер шага положительный

1. Объясняются следующие три случая: начальный индекс по умолчанию начинается с 0, а размер шага по умолчанию равен 1.

2. Укажите начальный индекс и не указывайте конечный индекс, что означает, что он был выбран до конца данных.

df1[4:]  # 从索引4开始取到末尾

# 结果
  name  age sex  score address
4	关宇	 28	 男	 601	  深圳
5	刘蓓	 18	 女	 619	  广州
6	张菲	 25	 女	 701	  长沙

3. Измените значение размера шага

df1[0:4:2]  # 改变步长:每隔2个值取一行数据

# 结果
  name  age sex  score address
0	小明	 20	 男	  669	  北京
2	小孙	 27	 男	  642	  广州

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

df1[:4:2]  # 默认从0开始

4. Укажите только размер шага

df1[::2]   # 从头到尾,步长为2

# 结果
  name  age sex  score address
0	小明	 20	 男	  669	  北京
2	小孙	 27	 男	 642	  广州
4	关宇	 28	 男	 601	  深圳
6	张菲	 25	 女	 701	  长沙

размер шага отрицательный

1. Размер шага равен -1, и по умолчанию результаты выводятся в обратном порядке.

df1[::-1]  # 倒序输出

# 结果
   name  age sex  score address
6	 张菲	  25	女	   701	 长沙
5	 刘蓓	  18	女	   619	 广州
4	 关宇	  28	男	   601	 深圳
3	 王小	  20	男	   590	 武汉
2	 小孙	  27	男	   642	 广州
1	 小红	  18	女	   570	 深圳
0	 小明	  20	男	   669	 北京

2. Размер шага отрицательный, укажите начальный и конечный индексы, а начальный индекс больше конечного индекса.

df1[4:0:-1]
  name  age sex  score address
4	关宇	 28	 男	  601	  深圳
3	王小	 20	 男	  590	  武汉
2	小孙	 27	 男	  642	  广州
1	小红	 18	 女	  570	  深圳

3. Начальный и конечный индексы — отрицательные числа.

df1[-1:-5:-1]  # 最后一行记录索引为-1,不包含索引为-5的数据
 name  age sex  score address
6	张菲	25	女	   701	 长沙
5	刘蓓	18	女	   619	 广州
4	关宇	28	男	   601	 深圳
3	王小	20	男	   590	 武汉

Используйте совет 6 — часто используемые функции

количество элементов

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

⚠️: Добавлен столбец в df1 в новом классе data: class, который пригодится позже

Например, мы хотим подсчитать, сколько раз появляется каждый город:

# 统计中每个城市各出现了多少次

address = df1["address"].value_counts()
address

Результат автоматически представляет собой данные типа Series в порядке убывания.

сброс индекса

сброс индекса с помощьюreset_index():

address_new = address.reset_index()
address_new

Другой пример: мы хотим извлечь данные с полем «мужской пол» из данных отдельно:

fale = df1[df1["sex"] == "男"]
fale

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

fale_1 = fale.reset_index()
fale_1

Индекс в появившемся результате - это результат, который нам нужен, но появляется новый столбец данных, который представляет собой данные, составленные из исходного индекса. Это не те данные, которые нам нужны, и их необходимо удалить:

fale_1 = fale.reset_index(drop=True)  # 加上参数即可解决
fale_1

переименовать свойство

Используется функция переименования и передается параметр столбца:

address_new = address_new.rename(columns={"index":"address",
                                         "address":"number"
                                        })
address_new

группировать по использованию

groupby в основном реализует функцию группировки статистики:

1. Например, мы хотим подсчитать общие баллы мужчин и женщин.

# 统计男女的总成绩:sum

sex_score = df1.groupby("sex")["score"].sum()
sex_score

2. Найдите средний балл для мужчин и женщин.

# 统计男女的平均成绩:mean

sex_score = df1.groupby("sex")["score"].mean()
sex_score

3. Найдите общий балл по полу и классу мужчин и женщин.

# 先根据性别、班级求总分

sex_class = df1.groupby(["sex","class"])["score"].sum()
sex_class

Одна строка кода для достижения вышеуказанной функции:

# 一行代码实现

df1.groupby(["sex","class"])["score"].sum().reset_index()

применить функцию

Или набор данных df1 выше:

1. Потребность 1: мы хотим объединить пол вМужчина становится 1, женщина становится 0

# 1、改变:男-1,女-0

df2 = df1.copy()  # 生成一个副本

df2["sex"] = df2["sex"].apply(lambda x: 1 if x=="男" else 0)  # 通过匿名函数解决
df2

Мы также можем настроить функцию для достижения:

#  自定义函数

def apply_sex(x):
    return 1 if x == "男" else 0

df3 = df1.copy()  # 生成一个副本df3

df3["sex"] = df3["sex"].apply(apply_sex)  # 通过自定义函数解决
df3

2. Например, мы хотим добавить «город» сзади каждого города, чтобы он стал Пекином, Шэньчжэнем и т. д.:

# 2、给每个城市加上一个字:市,变成北京市、深圳市等

df4 = df1.copy()

df4["address"] = df4["address"].apply(lambda x: x + "市")
df4

Суммировать

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