Всем привет, меня зовут Питер~
Желаем всем счастливого Танабата ❤️
3 функции сокровищ в Pandas
При использовании Pandas для обработки данных нам часто нужно выполнить одну и ту же операцию со строкой или столбцом данных или даже со всеми элементами.
в пандахmap
,apply
иapplymap
Он может решить большинство этих потребностей в обработке данных, так что вам больше не нужно повторять операции. Эта статья объединяет конкретные примеры, чтобы объяснить, как использовать эти три функции сокровища.
Серийные статьи Pandas
В настоящее время сериализовано 17 статей, из которых 1-16 относятся к первому изданию «Введение в анализ данных Pandas», начиная со сводной таблицы и кросс-таблицы 17-й статьи, которые являются расширенным содержанием.
Данные моделирования
Ниже приведены основные данные моделирования, личная информация нескольких студентов (данные предназначены только для обучения)
import numpy as np
import pandas as pd
data = pd.DataFrame({"name":["小明","小红","小张","小周","小孙","小王"],
"sex":["男","女","女","男","男","男"],
"birthday":["2003-07-07","1993-08-09","1999-03-05","1995-08-19","2002-11-18","1996-07-01"],
"address":["深圳南山区","广州越秀区","浙江杭州","上海","北京海淀","湖北省武汉市武昌"],
"age":[18,28,22,26,19,25],
"height":[189,178,167,172,182,185],
"weight":[89,72,62,68,79,81]
})
data
Давайте посмотрим на типы данных: первые четыре — символьные, а последние три — числовые.
map
Предположим, у нас сейчас есть такое требование: поскольку иногда при обработке данных необходимо использовать числовые данные, замените мужской пол в колонке гендера вышеприведенных данных на 1, а женский на 0.
Как этого добиться?
Способ 1: Цикл
Если вы не хотите так усложнять: это достигается зацикливанием на определении пола мужчин и женщин, а затем прямым присвоением значений.
Перед каждой операцией мы генерируем копию смоделированных данных, не уничтожая исходные данные.
Напишите цикл для присвоения значений:
Способ 2: реализация карты
Циклический метод проще для понимания и удобнее для написания, но когда объем данных слишком велик, цикл будет слишком медленным. Как пользоваться картой?
Или сначала сделайте копию:
1. Отображение отношений через словарь
2. Напишите функцию для передачи на карту
сводка использования карты: используйте словарь или функцию, чтобы передать его методу карты, он будет передавать входящие данные в качестве параметров в словарь или функцию один за другим, а затем получать сопоставленное значение.
apply
Метод apply похож на map при использовании, но apply является более полным и мощным, и он может передавать более сложные функции, которые объясняются на примерах.
параметр
DataFrame.apply(
func, # 待执行的函数
axis=0, # 沿着哪个轴操作,默认是0-index,1-column
raw=False, # 是否转成numpy的ndarray数组进行操作,默认是false
result_type=None, # expand’, ‘reduce’, ‘broadcast’, None # 当axis=1执行,对列属性名进行操作
args=(), # 两个可选参数
**kwargs)
Прежде чем продолжить, создайте копию data3:
Передайте различные функции
Применять метод, который мы можем пройти различные функции:
- пользовательская функция
- анонимная функция Python
- Python поставляется с функциями
- pandas поставляется с функциями
1. Пользовательская функция
Мы передаем пользовательскую функцию: функция выше, которая изменяет метод представления пола.
Предполагая, что все вышеуказанные возрасты - это реальные годы, мы хотим увидеть виртуальный возраст каждого человека, то есть добавить к возрасту 1 (возраст + 1), как с этим быть?
2. Анонимная функция питона: лямбда
3, Python поставляется с функциями
Мы передаем функцию len, которая поставляется с python для определения длины каждой строки:
4. Pandas поставляется с функциями
Когда мы моделируем данные, поле дня рождения является символьным типом, и теперь мы используем функцию, которая поставляется с pandas, чтобы преобразовать его в тип данных, связанный со временем:
До конвертации
после преобразования
Укажите ось
Можно указать параметр оси, чтобы указать, с какой осью работать.По умолчанию ось = 0, в направлении столбца.
Чтобы проиллюстрировать этот параметр, мы моделируем простые данные:
Сравните со значением по умолчанию, ось = 0, ось = 1:
Взгляните на эффект в Excel:
result_type
В основном работают с именами столбцов вновь сгенерированного DataFrame иМожет работать только на оси = 1, 3 значения:
- expand
- broadcast
- reduce
1. Используйте result_type="expand"
2. Используйте result_type="broadcast"
Имена столбцов остаются без изменений
3. Используйте result_type="уменьшить"
Конечным результатом являются данные типа Series.
applymap
Использование applymap имеет определенные ограничения, это для DataFrameкаждые данныеПовторяй.
DataFrame.applymap(func, na_action=None, **kwargs)
Чтобы проиллюстрировать, смоделируйте простой фрагмент данных:
Как видите, приведенные выше данные имеют тип float64.
Добавьте 1 к каждому данным
3 десятичных знака для каждых данных
Отформатированные выходные данные: 3 десятичных знака для каждых данных
изменить тип данных
Тип данных приведенных выше данных моделирования df — float64, и теперь они единообразно преобразуются в тип str:
Обработка пропущенных значений
Если в данных отсутствуют значения, используйте параметр na_action для обработки:
Суммировать
Очень часто одни и те же операции выполняются со строками и столбцами данных. В этой статье объединены различные примеры для объяснения:
- карта: та же операция, которая может удовлетворить большинство данных типа Series
- применить: функции карты могут быть реализованы, что является более гибким и может быть передано в различные сложные или автономные функции для обработки данных.
- applymap: выполнить ту же операцию с данными в DataFrame, использовать меньше