Начало работы с пандами, навыки, которые вы должны освоить
Суммируйте методы работы панд, которые я часто использую:
- Создать данные 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 действительно мощный, и после его изучения он сэкономит нам много времени на обработку данных.